通过本地网关程序优化php远程调用的方法

文档序号:9910764阅读:444来源:国知局
通过本地网关程序优化php远程调用的方法
【技术领域】
[0001]本发明属于PHP技术领域,具体涉及一种通过本地网关程序优化PHP远程调用的方法。
【背景技术】
[0002]PHP是一种通用开源脚本语言,语法吸收了 C语言、Java和Per I的特点,利于学习,使用广泛,主要适用于Web开发领域。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快,应用十分广泛。
[0003]PHP在实现Web服务端功能的时候,同样也会有通过网络调用远程服务的需求。例如,操作数据库增、删、改、查数据库,向消息队列里面发送消息等。在比较通用的场景下,如数据库交互,PHP中提供了官方的C扩展支持,但是在一些特殊场景,比如和Kafka的通信,缺乏相应的扩展支持,就需要自己来进行远程调用。现有的特殊场景下PHP远程调用方法通常有两种:
方法一:根据服务提供方的通信协议,使用C语言来开发PHP的扩展。但C语言来开发PHP扩展难度较大;而且C语言虽然执行效率高,但是并没有实现长连接,当远程服务调用频率很高时,频繁的创建和关闭连接增加了调用时长。每一次调用都要打开一个新连接,当并发过高时,对服务方可提供的最大连接数造成了很大压力。
[0004]方法二:根据服务提供方的通信协议,直接使用PHP的socket来实现。由于PHP本身的执行效率较差,无法满足高性能场景下的调用需求;此外这种方法也不支持长连接,频繁的创建和关闭连接增加了调用时长,与方法一相同,每一次调用都要打开一个新连接,当并发过高时,对服务方可提供的最大连接数造成了很大压力。
[0005]显然,现有的两种解决方法均存在缺陷,它们和Kafka的交互基本都在1ms以上,还有可能更长,除了现有的性能不能满足我们要求外,当并发过高时,通常会出现ActiveMQ连接数不足的现象,导致后续请求不能及时处理,从而影响了接口的执行时间。

【发明内容】

[0006]为解决上述问题,本发明公开了一种通过本地网关程序优化PHP远程调用的方法,能够提升请求性能,同时可以减少远程连接的数量,避免远程服务能力不足带来的影响。
[0007]为了达到上述目的,本发明提供如下技术方案:
一种通过本地网关程序优化PHP远程调用的方法,增加与PHP服务器部署在同一台机器上的本地网关程序,由本地网关程序保持和远程服务之间的长连接,PHP服务和本地网关程序之间通过本机的进程间通信,然后再转发给远程服务,具体包括以下步骤:
步骤A,启动网关程序:
步骤A-1,监听配置文件中配置的Unix Domain Socket文件路径;
步骤A-2,根据配置文件的设置开启对应数量的线程,来处理监听local, sock; 步骤A-3,初始化连接池,根据配置文件设置初始化多个和远程服务的长连接;
步骤B,PHP组件和网关程序进行通信:
步骤B-1,从配置中读取Unix Domain Socket文件路径;
步骤B-2,创建并建立Socket连接;
步骤B-3,组装需要发送的消息;
步骤B-4,通过Socket将字符串发送给网关程序;
步骤B-5,关闭Socket连接;
步骤C,网关程序处理远程调用请求:
步骤C-1,解析请求的数据;
步骤C-2,从连接池中获取一个连接,如果没有可用连接,会创建并返回一个连接对象; 步骤C-3,通过连接发送消息;
步骤C-4,消息发送完后将连接放入连接池,由连接池保持创建好的连接不关闭。
[0008]进一步的,所述步骤B-3组装规则为:首行是Topic名称,与多条消息由换行符“\n”组合成一个字符串。
[0009]进一步的,所述步骤C-1解析规则为:以第一行作为Topic的名称,之后每一行都是需要转发的消息。
[0010]进一步的,所述数据解析模块定义与Kafka通信时使用换行符作为每一条消息的截止符,其中第一行是Kafka的Topic名称。
[0011]进一步的,所述本地网关程序包括N1组件、数据解析模块、连接池模块、配置管理模块,所述N1组件使用Netty作为其实现方案,监听本机的Unix Domain Socket文件;所述数据解析模块自定义了数据处理的协议;所述连接池模块用于维持和管理长连接;所述配置管理模块用于集中配置可变参数。
[0012]与现有技术相比,本发明具有如下优点和有益效果:
1.利用本地进程间通信有效提高性能,通过长连接避免了调用过程中创建和关闭连接的开销,并通过连接池来创建和管理连接,做到了连接数可控,避免连接过多造成远程服务器压力,达到毫秒以内完成远程调用。
[0013]2.通过Unix Domain Socket简化了进程间通信的方式,并且能够有很高的性能。
[0014]3.通过N1框架,使得网关程序本身在只需要很少资源(内存或CPU)的情况下就可以处理每秒万次以上的请求。
【附图说明】
[0015]图1为本发明流程图;
图2为本发明系统架构图;
图3为PHP组件和网关程序进行通信步骤的流程图;
图4为网关程序处理远程调用请求步骤的流程图。
【具体实施方式】
[0016]以下将结合具体实施例对本发明提供的技术方案进行详细说明,应理解下述【具体实施方式】仅用于说明本发明而不用于限制本发明的范围。
[0017]本发明的核心思想是在PHP的服务和远程的服务(比如Kafka)之间加一个本地应用一一即本地网关程序,该应用和PHP服务器部署在同一台机器上,由该应用保持和远程服务之间的长连接,PHP服务和该应用之间通过本机的进程间通信,然后再转发给远程服务,如图1所示。
[0018]实现本发明的系统架构如图2所示,包括:PHP组件、local.sock、本地网关程序,其中Ρ?Ρ组件封装了通过Unix Domain Socket和网关程序通信方法;local.sock是UnixDomain Socket文件,用于进程间通信。以调用Kafka为例,本地网关程序的结构包括N1组件、数据解析模块、连接池模块、配置管理模块,N1组件使用Netty作为其实现方案,监听本机的Unix Domain
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1