一种基于长连接的套接字同步方法

文档序号:7870817阅读:166来源:国知局
专利名称:一种基于长连接的套接字同步方法
技术领域
本发明涉及一种基于长连接的套接字同步方法。
背景技术
长连接指在一个连接上可以连续发送多个数据包,然后断开连接,在连接保持期间,如果没有数据包发送,需要双方发链路检测包,如图1所示。发送接收方式1、异步报文发送和接收是分开的,相互独立的,互不影响。这种方式又分两种情况(I)异步双工接收和发送·在同一个程序中,由两个不同的子进程分别负责发送和接收;(2)异步单工接收和发送是用两个不同的程序来完成。2、同步报文发送和接收是同步进行,既报文发送后等待接收替换报文。同步方式一般需要考虑超时问题,即报文发出去后不能无限等待,需要设定超时时间,超过该时间发送方不再等待读替换报文,直接通知超时返回。在长连接中一般是没有条件能够判断读写什么时候结束,所以必须要加长度报文头。读函数先是读取报文头的长度,再根据这个长度去读相应长度的报文。在同步方式通讯下,因为报文发送后需要等待替换报文,所以效率较低,大部分时间都浪费在等待返回上。尤其是在某笔交易超时的情况下,会造成后续所有交易都在等待,这种情况会导致通讯程序处于空闲等待现象,且通讯效率较低。

发明内容
本发明所要解决的技术问题是,针对现有技术的不足,提供一种在长连接通讯模式下,大幅提高长连接同步通讯时接口程序的处理效率基于长连接的套接字同步方法。本发明解决上述技术问题的技术方案如下一种基于长连接的套接字同步方法,具体包括以下步骤步骤1:接口模块将配置信息存入内存,并与外部服务器建立连接;步骤2 :接收内部服务器发送的内部请求,每个内部请求产生对应的唯一的请求参数,将内部请求和请求参数存入内部请求通讯链表,形成请求报文;步骤3 :将内部请求和请求参数存入外部通讯链表,并将请求报文发送至外部服务器;步骤4:接收外部服务器返回的返回报文,将所述报文与外部通讯链表中的请求参数对比,得出报文对应的内部请求;步骤5 :将返回报文转换为替换报文,并将替换报文通过对应的内部请求的socket套接字端口发送至内部服务器。
本发明的有益效果是本发明可以通过端口轮询的方法,使所有交易不需要等待上一笔交易的返回,避免通讯程序空闲等待,极大提高通讯程序的处理效率;可避免通讯程序处于空闲等待状态,充分利用端口资源。大幅提高长连接同步通讯时接口程序的处理效率。在上述技术方案的基础上,本发明还可以做如下改进。进一步,所述步骤I中与外部服务器建立的连接为长连接。进一步,所述步骤I中所述的的配置信息包括日志路径、对端地址、端口、登录口令和命令配置文件路径的配置。进一步,所述2具体包括以下步骤步骤2.1 :判断是否有内部请求连接,如果有,则接收内部请求,并继续下一步;否则,休眠一定时间后,继续判断是否有内部请求连接;步骤2.2 :解析请求的业务编码,接收准备发向外部服务器所需要的请求串,并参数对应每个请求的唯一的请求参数;步骤2. 3 :将请求和请求参数存入内部请求通讯链表中,并替换请求的内部参数,形成具体的发向外部服务器的请求报文。进一步,所述步骤2. 3中的请求报文的格式为key=value键名称格式,请求的内部参数替换是将key键替换成value值。进一步,所述步骤4具体包括以下步骤步骤4.1 :遍历外部通讯链表,判断是否需要发送心跳信息,如果是,发送心跳信息,并返回继续遍历外部通讯链表;否则,接收外部服务器的返回报文,并继续下一步;步骤4. 2 :判断外部服务器的返回报文是否为心跳包,如果是,则忽略此报文,跳转至步骤4.1 ;否则,继续下一步;步骤4.3 :将返回报文与外部通讯链表中的请求参数进行比较,找到该报文所对应的内部请求。进一步,所述步骤5具体包括以下步骤步骤5.1 :将返回报文通过参数截取操作,转换为替换报文;步骤5. 2 :查询出对应报文的内部请求的socket套接字端口 ;步骤5. 3 :将替换报文通过socket套接字端口发送至内部服务器。进一步,所述步骤4. 3中所述返回报文中包含报文数据和唯一对应的请求参数,所述返回报文中的请求参数与内部请求的请求参数相同时,所述报文与所述内部请求相对应。其中心跳信息为一种定时检测信息,例如服务器和客户端之间进行通讯,每隔5分钟进行一次心跳检测,检测和主站连接是否正常。客户端每5分钟发一个心跳检测数据帧,服务器接收到数据帧表示通过,否则表示客户端断开,抛出异常。

定义内部通讯的消息结构体的具体操作如下struct ReqConnID{
intconnID; ---内部请求连接socket描述符
t ime_tbeg;---请求开始时间
charopcode [4];---业务操作编码
inttotallen; ---消息长度
intwaits end; ---请求发送标识
MML*mmlptr; ---向外部发送的消息结构体指针
time-treqtime; ---发向服务器的
intsessionID; ---维持长连接的会话ID
inttransID; ---外部识别的交易流水
I n tcmd ID; ---外部识别的命令ID
intanother; /** O:还有其他数据包,1:没有其他数据包**/
struct ReqConnID * next;定义外部通讯的消息结构体。
struct SmpConnID{intconnID;---请求外部连接socket描述符
11 me tbeg;---请求开始时间
mtsessionID;---通讯会话 ID
intms glen; ---消息长度
time treqtime; ---消息请求时间
charsrvname [32];---交易服务名称
charusername [32];---登录用户名
charuserpswd [32];---登录密码
chartermID [32]; —终端标识
struct SmpConnID *next;


图1为长连接处理流程图;图2为本发明具体实施例1所述的一种基于长连接的套接字同步方法流程图;图3为长连接处理流程的详细图示图;图4为本发明具体实施例2所述的一种基于长连接的套接字同步方法流程图。
具体实施例方式以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。如图2所示,本发明具体实施例1所述的一种基于长连接的套接字同步方法,具体包括以下步骤一种基于长连接的套接字同步方法,具体包括以下步骤步骤1:接口模块将配置信息存入内存,并与外部服务器建立连接;步骤2:判断是否有内部请求连接,如果有,则接收内部请求,并继续下一步;否则,休眠一定时间后,继续判断是否有内部请求连接;步骤3 :解析请求的业务编码,接收准备发向外部服务器所需要的请求串,并参数对应每个请求的唯一的请求参数;步骤4 :将请求和请求参数存入内部请求通讯链表中,并替换请求的内部参数,形成具体的发向外部服务器的请求报文。步骤5 :将内部请求和请求参数存入外部通讯链表,并将请求报文发送至外部服务器;
步骤6 :遍历外部通讯链表,判断是否需要发送心跳信息,如果是,发送心跳信息,并返回继续遍历外部通讯链表;否则,接收外部服务器的返回报文,并继续下一步;步骤7 :判断外部服务器的返回报文是否为心跳包,如果是,则忽略此报文,跳转至步骤6;否则,继续下一步;步骤8 :将返回报文与外部通讯链表中的请求参数进行比较,找到该报文所对应的内部请求。步骤9 :将返回报文通过参数截取操作,转换为替换报文;步骤10 :查询出对应报文的内部请求的socket套接字端口 ;步骤11 :将替换报文通过socket套接字端口发送至内部服务器。所述步骤I中与外部服务器建立的连接为长连接。所述步骤I中所述的的配置信·息包括日志路径、对端地址、端口、登录口令和命令配置文件路径的配置。所述步骤4中的请求报文的格式为key=value键名称格式,请求的内部参数替换是将key键替换成value值。所述步骤8中所述返回报文中包含报文数据和唯一对应的请求参数,所述返回报文中的请求参数与内部请求的请求参数相同时,所述报文与所述内部请求相对应。其中心跳信息为一种定时检测信息,例如服务器和客户端之间进行通讯,每隔5分钟进行一次心跳检测,检测和主站连接是否正常。客户端每5分钟发一个心跳检测数据帧,服务器接收到数据帧表示通过,否则表示客户端断开,抛出异常。图3为长连接处理流程的详细图示,SMP接入终端在一次登录内进行操作的完整的消息流。图3注释1:1. 一个TCP连接可以并行接入多个会话2.每个会话以DLGLGN开始,以DLGEND结束3.每个会话中可以并行启动多个事务4.每个事务以TXBEG开始,以TXEND结束5.每个事务中可以有多条消息6.每个消息在“操作消息”域里只能存放一条MML命令(或ACK)图3注释2 1. η为操作信息的长度(η的取值范围为0-64944)2. w和X为会话的ID, w由客户端生成,在一个连接中等待登陆的会话中w必须唯一,而X由SMP分配并在会话的第一条ACK返回,由SMP保持唯3. y为事务ID,事务ID随着每一次事务而递增4. z为消息的校验和,是对“消息头+会话头+事务头+操作信息”按32位异或后取反的值5.客户端使用SMP管理员分配的标识填写“终端标识”域6.根据具体的命令填写“服务名”域(login和logout时使用SKVM作为固定的服务名)如图4所示,本发明具体实施例2所述的一种基于长连接的套接字同步方法,在电信业务支撑系统里,有一些预付费业务,预付费用户是由智能网网元管理的。SMP表示智能网设备业务管理点。业务支撑系统与SMP之间的通讯协议是MML协议。为此,根据本发明的技术,开发MML接口适配器。业务支撑系统与SMP在发送消息前,必须与SMP建立TCP/IP SOCKET连接。在业务支撑系统不再需要与SMP进行交互后,必须拆除与SMP的SOCKET连接。在空闲时,可以保持与SMP的连接,此时只需要发送心跳消息。1.程序初始化;2.与mml平台(mml平台是指mml协议的平台,smp是其中一种)建立连接;3.判断连接是否正常。如果正常,则进入流程4,;如果不是,则结束。4.进入主循环。从总线接收内部消息。接收到一条消息后,解析出opcode和参数串,替换参数,并将替换后的报文发给mml平台;5.接收mml平台应答信息。校验替换报文合法性。解析返回码和返回信息。找到对应的connID后,反馈应答;6.每隔一秒对bustimeout减一秒,如果bustimeout等于O,则总总线发送心跳。SMP与业务支撑系统间消息交互如图3所示,MML接口与SMP建立长连接。连接建立成功以后,MML接口监听从EAI总线接收内部请求消息,将内部请求经过MML协议转换,形成MML协议请求报文,将MML请 求报文发向服务器SMP平台。以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种基于长连接的套接字同步方法,其特征在于,具体包括以下步骤 步骤1:接ロ模块将配置信息存入内存,并与外部服务器建立连接; 步骤2 :接收内部服务器发送的内部请求,每个内部请求产生对应的唯一的请求參数,将内部请求和请求參数存入内部请求通讯链表,形成请求报文; 步骤3 :将内部请求和请求參数存入外部通讯链表,并将请求报文发送至外部服务器; 步骤4 :接收外部服务器返回的返回报文,将所述报文与外部通讯链表中的请求參数对比,得出报文对应的内部请求; 步骤5 :将返回报文转换为替换报文,并将替换报文通过对应的内部请求的socket套接字端ロ发送至内部服务器。
2.根据权利要求1所述的ー种基于长连接的套接字同步方法,其特征在于,所述步骤1中与外部服务器建立的连接为长连接。
3.根据权利要求2所述的ー种基于长连接的套接字同步方法,其特征在于,所述步骤1中所述的的配置信息包括日志路径、对端地址、端ロ、登录ロ令和命令配置文件路径的配置。
4.根据权利要求3所述的ー种基于长连接的套接字同步方法,其特征在于,所述2具体包括以下步骤 步骤2.1 :判断是否有内部请求连接,如果有,则接收内部请求,并继续下一歩;否则,休眠一定时间后,继续判断是否有内部请求连接; 步骤2.2 :解析请求的业务编码,接收准备发向外部服务器所需要的请求串,并參数对应姆个请求的唯一的请求參数; 步骤2.3 :将请求和请求參数存入内部请求通讯链表中,并替换请求的内部參数,形成具体的发向外部服务器的请求报文。
5.根据权利要求4所述的ー种基于长连接的套接字同步方法,其特征在于,所述步骤2.3中的请求报文的格式为key=value键名称格式,请求的内部參数替换是将key键替换成value 值。
6.根据权利要求5所述的ー种基于长连接的套接字同步方法,其特征在于,所述步骤4具体包括以下步骤 步骤4.1 :遍历外部通讯链表,判断是否需要发送心跳信息,如果是,发送心跳信息,并返回继续遍历外部通讯链表;否则,接收外部服务器的返回报文,并继续下一歩; 步骤4.2 :判断外部服务器的返回报文是否为心跳包,如果是,则忽略此报文,跳转至步骤4.1;否则,继续下一歩; 步骤4.3 :将返回报文与外部通讯链表中的请求參数进行比较,找到该报文所对应的内部请求。
7.根据权利要求1至6任一项所述的一种基于长连接的套接字同步方法,其特征在干,所述步骤5具体包括以下步骤 步骤5.1 :将返回报文通过參数截取操作,转换为替换报文; 步骤5.2 :查询出对应报文的内部请求的socket套接字端ロ ; 步骤5.3 :将替换报文通过socket套接字端ロ发送至内部服务器。
8.根据权利要求7所述的ー种基于长连接的套接字同步方法,其特征在于,所述步骤.4.3中所述返回报文中包含报文数据和唯一对应的请求參数,所述返回报文中的请求參数与内部请求的请求參数相同时,所述报文与所述内部请求相对应。
全文摘要
本发明涉及一种基于长连接的套接字同步方法,具体包括以下步骤步骤1接口模块将配置信息存入内存,并与外部服务器建立连接;步骤2接收内部服务器发送的内部请求;步骤3将内部请求和请求参数存入外部通讯链表;步骤4接收外部服务器返回的返回报文,得出报文对应的内部请求;步骤5将返回报文转换为替换报文,并将替换报文通过对应的内部请求的socket套接字端口发送至内部服务器。本发明可以通过端口轮询的方法,使所有交易不需要等待上一笔交易的返回,避免通讯程序空闲等待,极大提高通讯程序的处理效率;可避免通讯程序处于空闲等待状态,充分利用端口资源。大幅提高长连接同步通讯时接口程序的处理效率。
文档编号H04L12/26GK103051724SQ201210585309
公开日2013年4月17日 申请日期2012年12月28日 优先权日2012年12月28日
发明者张厚瑞 申请人:北京思特奇信息技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1