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

文档序号:9910764阅读:来源:国知局
Socket文件;数据解析模块自定义了数据处理的协议,例如与Kafka通信时使用较为简单的处理方式,使用换行符作为每一条消息的截止符,其中第一行是Kafka的Topic名称,显然,当调用其他远程服务时需定义不同的数据处理协议;连接池模块是网关程序基于Apache Common Pool2实现的一个管理Kafka Producer的连接池,维持和管理Kafka Server的长连接;配置管理模块实现了从YAML格式的配置文件中读取配置,并支持定义不同环境下使用不同的配置,集中配置一些可变参数。
[0019]通过上述本地网关程序优化PHP远程调用的方法,包括以下步骤:
步骤A,启动网关程序:
步骤A-1,监听配置文件中配置的Unix Domain Socket文件路径,这里默认是/var/local.sock;
步骤A-2,根据配置文件的设置开启对应数量的线程,默认是10个,来处理监听local.sock;
步骤A-3,初始化连接池,根据配置文件设置初始化多个和远程服务的长连接。
[0020]步骤B,PHP组件和网关程序进行通信,流程如图3所示:
步骤B-1,从配置中读取Unix Domain Socket文件路径,这里默认是/var/local.sock;步骤B-2,创建并建立Socket连接,虽然这里用了 Socket API,但由于PHP组件和网关程序在同一台机器上,因此直接通过系统内核通信,实际数据并不会走网络层;
步骤B-3,组装需要发送的消息,首行是Topic名称,与多条消息由换行符“\n”组合成一个字符串。Kafka调用使用的数据协议是基于换行符的,首行是目标名,之后每一行都代表一条数据,这个好处是可以流式地处理批量的消息,降低了数据解析的开销(比如常用的JSON或XML就需要把整个消息体都获取到才可以解析)。
[0021]步骤B-4,通过Socke t将字符串发送给网关程序;
步骤B-5,关闭Socket连接。
[0022 ] 步骤C,网关程序处理远程调用请求,流程如图4所示:
步骤C-1,解析请求的数据,以第一行作为Topic的名称,之后每一行都是需要转发的消息;根据远程调用服务种类不同,本步骤具体解析过程会有所变化。
[0023]步骤C-2,从连接池中获取一个连接,如果没有可用连接,会创建并返回一个连接对象;
步骤C-3,通过连接发送消息;
步骤C-4,消息发送完后将连接放入连接池,由连接池保持创建好的连接不关闭。
[0024]经过压力测试对比,与以往解决方案相比,采用本发明方法和Kafka的通信时性能提升有100倍,每次处理时间都在I毫秒以内,远程服务的连接数也很低,整体运行过程中网关程序使用的CPU很低,不仅提高了效率,还降低了资源消耗,性能有很大提升。
[0025]本发明方案所公开的技术手段不仅限于上述实施方式所公开的技术手段,还包括由以上技术特征任意组合所组成的技术方案。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。
【主权项】
1.一种通过本地网关程序优化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,消息发送完后将连接放入连接池,由连接池保持创建好的连接不关闭。2.根据权利要求1所述的通过本地网关程序优化PHP远程调用的方法,其特征在于:所述远程调用请求为Kafka。3.根据权利要求2所述的通过本地网关程序优化PHP远程调用的方法,其特征在于:所述步骤B-3组装规则为:首行是Topic名称,与多条消息由换行符“\n”组合成一个字符串。4.根据权利要求2所述的通过本地网关程序优化PHP远程调用的方法,其特征在于:所述步骤C-1解析规则为:以第一行作为Topic的名称,之后每一行都是需要转发的消息。5.根据权利要求1所述的通过本地网关程序优化PHP远程调用的方法,其特征在于:所述本地网关程序包括NI O组件、数据解析模块、连接池模块、配置管理模块,所述NI O组件使用Netty作为其实现方案,监听本机的Unix Domain Socket文件;所述数据解析模块自定义了数据处理的协议;所述连接池模块用于维持和管理长连接;所述配置管理模块用于集中配置可变参数。6.根据权利要求5所述的通过本地网关程序优化PHP远程调用的方法,其特征在于:所述数据解析模块定义与Kafka通信时使用换行符作为每一条消息的截止符,其中第一行是Kafka的Topi c 名称。
【专利摘要】本发明公开了一种通过本地网关程序优化PHP远程调用的方法,通过增加和PHP服务器部署在同一台机器上的本地网关程序,由本地网关程序保持和远程服务之间的长连接,PHP服务和本地网关程序之间通过本机的进程间通信,然后再转发给远程服务,从而利用本地进程间通信有效提高性能,通过长连接避免了调用过程中创建和关闭连接的开销,并通过连接池来创建和管理连接,做到了连接数可控,避免连接过多造成远程服务器压力,达到毫秒以内完成远程调用。
【IPC分类】G06F9/445, G06F9/54
【公开号】CN105677397
【申请号】CN201511026837
【发明人】张军
【申请人】南京途牛科技有限公司
【公开日】2016年6月15日
【申请日】2015年12月30日
当前第2页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1