CN103051724B - 一种基于长连接的套接字同步方法 - Google Patents
一种基于长连接的套接字同步方法 Download PDFInfo
- Publication number
- CN103051724B CN103051724B CN201210585309.2A CN201210585309A CN103051724B CN 103051724 B CN103051724 B CN 103051724B CN 201210585309 A CN201210585309 A CN 201210585309A CN 103051724 B CN103051724 B CN 103051724B
- Authority
- CN
- China
- Prior art keywords
- request
- internal
- message
- internal request
- socket
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Abstract
本发明涉及一种基于长连接的套接字同步方法,具体包括以下步骤:步骤1:接口模块将配置信息存入内存,并与外部服务器建立连接;步骤2:接收内部服务器发送的内部请求;步骤3:将内部请求和请求参数存入外部通讯链表;步骤4:接收外部服务器返回的返回报文,得出报文对应的内部请求;步骤5:将返回报文转换为替换报文,并将替换报文通过对应的内部请求的socket套接字端口发送至内部服务器。本发明可以通过端口轮询的方法,使所有交易不需要等待上一笔交易的返回,避免通讯程序空闲等待,极大提高通讯程序的处理效率;可避免通讯程序处于空闲等待状态,充分利用端口资源。大幅提高长连接同步通讯时接口程序的处理效率。
Description
技术领域
本发明涉及一种基于长连接的套接字同步方法。
背景技术
长连接:指在一个连接上可以连续发送多个数据包,然后断开连接,在连接保持期间,如果没有数据包发送,需要双方发链路检测包,如图1所示。
发送接收方式:
1、异步
报文发送和接收是分开的,相互独立的,互不影响。这种方式又分两种情况:
(1)异步双工:接收和发送在同一个程序中,由两个不同的子进程分别负责发送和接收;
(2)异步单工:接收和发送是用两个不同的程序来完成。
2、同步
报文发送和接收是同步进行,既报文发送后等待接收替换报文。同步方式一般需要考虑超时问题,即报文发出去后不能无限等待,需要设定超时时间,超过该时间发送方不再等待读替换报文,直接通知超时返回。
在长连接中一般是没有条件能够判断读写什么时候结束,所以必须要加长度报文头。读函数先是读取报文头的长度,再根据这个长度去读相应长度的报文。
在同步方式通讯下,因为报文发送后需要等待替换报文,所以效率较低,大部分时间都浪费在等待返回上。尤其是在某笔交易超时的情况下,会造成后续所有交易都在等待,这种情况会导致通讯程序处于空闲等待现象,且通讯效率较低。
发明内容
本发明所要解决的技术问题是,针对现有技术的不足,提供一种在长连接通讯模式下,大幅提高长连接同步通讯时接口程序的处理效率基于长连接的套接字同步方法。
本发明解决上述技术问题的技术方案如下:一种基于长连接的套接字同步方法,具体包括以下步骤:
步骤1:接口模块将配置信息存入内存,并与外部服务器建立连接;
步骤2:接收内部服务器发送的内部请求,每个内部请求产生对应的唯一的请求参数,将内部请求和请求参数存入内部请求通讯链表,形成请求报文;
步骤3:将内部请求和请求参数存入外部通讯链表,并将请求报文发送至外部服务器;
步骤4:接收外部服务器返回的返回报文,将所述返回报文与外部通讯链表中的请求参数对比,得出返回报文对应的内部请求;
步骤5:将返回报文转换为替换报文,并将替换报文通过对应的内部请求的socket套接字端口发送至内部服务器。
本发明的有益效果是:本发明可以通过端口轮询的方法,使所有交易不需要等待上一笔交易的返回,避免通讯程序空闲等待,极大提高通讯程序的处理效率;可避免通讯程序处于空闲等待状态,充分利用端口资源。大幅提高长连接同步通讯时接口程序的处理效率。
在上述技术方案的基础上,本发明还可以做如下改进。
进一步,所述步骤1中与外部服务器建立的连接为长连接。
进一步,所述步骤1中所述的的配置信息包括日志路径、对端地址、端口、登录口令和命令配置文件路径的配置。
进一步,所述步骤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分钟发一个心跳检测数据帧,服务器接收到数据帧表示通过,否则表示客户端断开,抛出异常。
定义内部通讯的消息结构体的具体操作如下:
定义外部通讯的消息结构体。
附图说明
图1为长连接处理流程图;
图2为本发明具体实施例1所述的一种基于长连接的套接字同步方法流程图;
图3为长连接处理流程的详细图示图;
图4为本发明具体实施例2所述的一种基于长连接的套接字同步方法流程图。
具体实施方式
以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
如图2所示,本发明具体实施例1所述的一种基于长连接的套接字同步方法,具体包括以下步骤:
一种基于长连接的套接字同步方法,具体包括以下步骤:
步骤1:接口模块将配置信息存入内存,并与外部服务器建立连接;
步骤2:判断是否有内部请求连接,如果有,则接收内部请求,并继续下一步;否则,休眠一定时间后,继续判断是否有内部请求连接;
步骤3:解析请求的业务编码,接收准备发向外部服务器所需要的请求串,并参数对应每个请求的唯一的请求参数;
步骤4:将请求和请求参数存入内部请求通讯链表中,并替换请求的内部参数,形成具体的发向外部服务器的请求报文。
步骤5:将内部请求和请求参数存入外部通讯链表,并将请求报文发送至外部服务器;
步骤6:遍历外部通讯链表,判断是否需要发送心跳信息,如果是,发送心跳信息,并返回继续遍历外部通讯链表;否则,接收外部服务器的返回报文,并继续下一步;
步骤7:判断外部服务器的返回报文是否为心跳包,如果是,则忽略此返回报文,跳转至步骤6;否则,继续下一步;
步骤8:将返回报文与外部通讯链表中的请求参数进行比较,找到该返回报文所对应的内部请求。
步骤9:将返回报文通过参数截取操作,转换为替换报文;
步骤10:查询出对应替换报文的内部请求的socket套接字端口;
步骤11:将替换报文通过socket套接字端口发送至内部服务器。
所述步骤1中与外部服务器建立的连接为长连接。
所述步骤1中所述的的配置信息包括日志路径、对端地址、端口、登录口令和命令配置文件路径的配置。
所述步骤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.n为操作信息的长度(n的取值范围为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/IPSOCKET连接。在业务支撑系统不再需要与SMP进行交互后,必须拆除与SMP的SOCKET连接。在空闲时,可以保持与SMP的连接,此时只需要发送心跳消息。
1.程序初始化;
2.与mml平台(mml平台是指mml协议的平台,smp是其中一种)建立连接;
3.判断连接是否正常。如果正常,则进入流程4,;如果不是,则结束。
4.进入主循环。从总线接收内部消息。接收到一条消息后,解析出opcode和参数串,替换参数,并将替换后的报文发给mml平台;
5.接收mml平台应答信息。校验替换报文合法性。解析返回码和返回信息。找到对应的connID后,反馈应答;
6.每隔一秒对bustimeout减一秒,如果bustimeout等于0,则总总线发送心跳。
SMP与业务支撑系统间消息交互如图3所示,MML接口与SMP建立长连接。连接建立成功以后,MML接口监听从EAI总线接收内部请求消息,将内部请求经过MML协议转换,形成MML协议请求报文,将MML请求报文发向服务器SMP平台。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (7)
1.一种基于长连接的套接字同步方法,其特征在于,具体包括以下步骤:
步骤1:接口模块将配置信息存入内存,并与外部服务器建立连接;
步骤2:接收内部服务器发送的内部请求,每个内部请求产生对应的唯一的请求参数,将内部请求和请求参数存入内部请求通讯链表,形成请求报文;
步骤3:将内部请求和请求参数存入外部通讯链表,并将请求报文发送至外部服务器;
步骤4:接收外部服务器返回的返回报文,将所述返回报文与外部通讯链表中的请求参数对比,得出返回报文对应的内部请求;
步骤5:将返回报文转换为替换报文,并将替换报文通过对应的内部请求的socket套接字端口发送至内部服务器。
2.根据权利要求1所述的一种基于长连接的套接字同步方法,其特征在于,所述步骤1中所述的的配置信息包括日志路径、对端地址、端口、登录口令和命令配置文件路径的配置。
3.根据权利要求2所述的一种基于长连接的套接字同步方法,其特征在于,所述步骤2具体包括以下步骤:
步骤2.1:判断是否有内部请求连接,如果有,则接收内部请求,并继续下一步;否则,休眠一定时间后,继续判断是否有内部请求连接;
步骤2.2:解析内部请求的业务编码,接收准备发向外部服务器所需要的请求串,并产生对应每个内部请求的唯一的请求参数;
步骤2.3:将内部请求和请求参数存入内部请求通讯链表中,并替换内部请求的内部参数,形成具体的发向外部服务器的请求报文。
4.根据权利要求3所述的一种基于长连接的套接字同步方法,其特征在于,所述步骤2.3中的请求报文的格式为key=value键名称格式,请求的内部参数替换是将key键替换成value值。
5.根据权利要求4所述的一种基于长连接的套接字同步方法,其特征在于,所述步骤4具体包括以下步骤:
步骤4.1:遍历外部通讯链表,判断是否需要发送心跳信息,如果是,发送心跳信息,并返回继续遍历外部通讯链表;否则,接收外部服务器的返回报文,并继续下一步;
步骤4.2:判断外部服务器的返回报文是否为心跳包,如果是,则忽略此返回报文,跳转至步骤4.1;否则,继续下一步;
步骤4.3:将返回报文与外部通讯链表中的请求参数进行比较,找到该返回报文所对应的内部请求。
6.根据权利要求1至5任一项所述的一种基于长连接的套接字同步方法,其特征在于,所述步骤5具体包括以下步骤:
步骤5.1:将返回报文通过参数截取操作,转换为替换报文;
步骤5.2:查询出对应替换报文的内部请求的socket套接字端口;
步骤5.3:将替换报文通过socket套接字端口发送至内部服务器。
7.根据权利要求5所述的一种基于长连接的套接字同步方法,其特征在于,所述步骤4.3中所述返回报文中包含报文数据和唯一对应的请求参数,所述返回报文中的请求参数与内部请求的请求参数相同时,所述返回报文与所述内部请求相对应。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210585309.2A CN103051724B (zh) | 2012-12-28 | 2012-12-28 | 一种基于长连接的套接字同步方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210585309.2A CN103051724B (zh) | 2012-12-28 | 2012-12-28 | 一种基于长连接的套接字同步方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103051724A CN103051724A (zh) | 2013-04-17 |
CN103051724B true CN103051724B (zh) | 2016-06-15 |
Family
ID=48064218
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210585309.2A Active CN103051724B (zh) | 2012-12-28 | 2012-12-28 | 一种基于长连接的套接字同步方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103051724B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104050284B (zh) * | 2014-06-27 | 2017-11-10 | 北京思特奇信息技术股份有限公司 | 一种基于单进程的数据异步查询方法及系统 |
CN105407117B (zh) * | 2014-09-10 | 2019-04-09 | 腾讯科技(深圳)有限公司 | 分布式备份数据的方法、装置和系统 |
CN105635248B (zh) * | 2015-12-18 | 2019-06-11 | Tcl集团股份有限公司 | 一种tcp连接资源的释放方法及系统 |
CN107135279B (zh) * | 2017-07-07 | 2020-11-27 | 网宿科技股份有限公司 | 一种处理长连接建立请求的方法和装置 |
CN108418799A (zh) * | 2018-02-01 | 2018-08-17 | 北京云知声信息技术有限公司 | 长连接的建立方法及系统 |
CN109446464B (zh) * | 2018-11-09 | 2021-02-02 | 深圳高灯计算机科技有限公司 | 并发数确定方法、装置及服务器 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101064625A (zh) * | 2006-04-27 | 2007-10-31 | 中兴通讯股份有限公司 | 一种穿越网络地址翻译网关对用户侧设备进行管理的方法 |
CN102546808A (zh) * | 2012-01-17 | 2012-07-04 | 深圳天源迪科信息技术股份有限公司 | 服务端基于tcp的交互处理方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1825828B (zh) * | 2005-02-24 | 2011-04-27 | 北京风行在线技术有限公司 | 一种两端均处于不同nat下直接穿透通信的控制方法和设备 |
-
2012
- 2012-12-28 CN CN201210585309.2A patent/CN103051724B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101064625A (zh) * | 2006-04-27 | 2007-10-31 | 中兴通讯股份有限公司 | 一种穿越网络地址翻译网关对用户侧设备进行管理的方法 |
CN102546808A (zh) * | 2012-01-17 | 2012-07-04 | 深圳天源迪科信息技术股份有限公司 | 服务端基于tcp的交互处理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103051724A (zh) | 2013-04-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103051724B (zh) | 一种基于长连接的套接字同步方法 | |
CN101909257B (zh) | M2m平台实现多种承载协议并发接入的方法及系统 | |
CN102377814B (zh) | 针对嵌入式操作系统的远程协助服务方法 | |
CN103096435B (zh) | 连接保持方法、装置以及移动终端 | |
US20060029389A1 (en) | Optical network terminal with low power hibernation | |
CN102209302A (zh) | 一种实现移动终端信息推送的系统及方法 | |
CN107528891B (zh) | 一种基于WebSocket的自动集群方法及其系统 | |
WO2012097568A1 (zh) | 获取光网络单元故障信息的方法、系统和光线路终端 | |
CN112202872A (zh) | 一种数据转发方法、api网关及消息服务系统 | |
US9007228B2 (en) | Transmission system using dying gasp | |
CN108712289B (zh) | 采用硬件实现的tte端系统网络管理装置 | |
CN101707533B (zh) | 一种多业务pcm光接入网络中基于链路状态的网络控制方法及系统 | |
CN104463670A (zh) | 一种基于Websocket的银行前置交易系统的搭建方法 | |
CN104243719A (zh) | 移动通信网络中长连接的心跳周期确定方法、系统和装置 | |
TWI498037B (zh) | 服務資訊管理方法及服務資訊管理系統 | |
CN101699915B (zh) | 一种主板、实现锁网/锁卡功能的方法及移动终端 | |
CN101741556B (zh) | 一种接入互联网的方法和系统 | |
CN102917082A (zh) | 穿透网络地址转换的消息推送方法及系统 | |
CN101888308B (zh) | 一种多板卡嵌入式设备集成化管理的实现方法 | |
CN105721509A (zh) | 一种服务器系统 | |
CN104009961A (zh) | 一种PPPoE会话标识分配方法及设备 | |
CN102281334B (zh) | 一种有线终端的管理控制方法及系统以及接入服务器 | |
CN101436953B (zh) | 一种网络设备在线宣告消息的管理方法及处理模块 | |
CN109688124B (zh) | 一种基于视频边界的数据交换方法 | |
CN103533001A (zh) | 基于http多重代理的通信方法和系统、中间代理服务器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |