CN105763634B - 一种基于tcp长连接的服务实现方法和装置 - Google Patents
一种基于tcp长连接的服务实现方法和装置 Download PDFInfo
- Publication number
- CN105763634B CN105763634B CN201610230675.4A CN201610230675A CN105763634B CN 105763634 B CN105763634 B CN 105763634B CN 201610230675 A CN201610230675 A CN 201610230675A CN 105763634 B CN105763634 B CN 105763634B
- Authority
- CN
- China
- Prior art keywords
- subprocess
- business
- communication
- service
- communication conduit
- 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
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/14—Session management
- H04L67/141—Setup of application sessions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
- Exchange Systems With Centralized Control (AREA)
Abstract
本实施例提供的一种基于TCP长连接的服务实现方法和装置,包括:主进程从配置文件中获取监听端口,主进程接收客户端发送的连接请求,并判断连接请求数是否超过预设的连接数阈值;如果所述连接请求数在所述预设的连接数阈值范围内,则所述主进程创建通讯子进程,并对所述通讯子进程进行初始化;通过异步轮询机制处理文件描述符集合,并通过通讯管道数组异步调度业务子进程。本发明在少量连接数情况下,即可以达到上万并发量,提高服务端的呑吐量;利用轮询方式,将连接与通讯模块分离,利用管道通讯,实现通讯与业务处理分离,通讯层面协议调整和后端业务逻辑调整互不影响,高度可复用,扩展性强。
Description
技术领域
本发明涉及通信领域,特别是涉及一种基于TCP长连接的服务实现方法和装置。
背景技术
当网络通信时采用传输控制协议(Transmission Control Protocol,TCP)时,客户端向服务器发起连接,服务器接受客户端的连接。客户端与服务器完成一次读写之后,它们之间的连接并不会主动关闭,后续的读写操作会继续使用这个连接。
TCP的保活功能主要为服务器应用提供,服务器应用希望知道客户端是否崩溃。如果客户端已经消失,使得服务器上保留一个半开放的连接,而服务器又在等待来自客户端的数据,则服务器将永远等待客户端的数据,保活功能就是试图在服务器端检测到这种半开放的连接。
如果一个给定的连接在两小时内没有任何的动作,则服务器就向客户端发一个探测报文段,客户端处于以下4个状态之一:
客户端依然正常运行,并从服务器可达。客户端的TCP响应正常,而服务器也知道对方是正常的,服务器在两小时后将保活定时器复位。
客户端已经崩溃,并且关闭或者正在重新启动。在任何一种情况下,客户端的TCP都没有响应。如果服务器没有收到一个响应,服务器认为客户端已经关闭并终止连接。
客户端崩溃并已经重新启动。服务器将收到一个对其保活探测的响应,这个响应是一个复位,使得服务器终止这个连接。
客户端正常运行,但是服务器不可达,TCP发现没有收到探查的响应。
TCP长连接编程难度相对较大。具体为:程序需要维护连接状态,需要额外编程,异常不好管控;TCP长连接并发对编程有较高难度,普通实现方案通过创建实现多进程并发,当调用业务服务出现堵塞时,会导致系统资源被耗光,从而整个服务器不可用,可靠性不高;TCP长连接协议各不相同,较难做到一个通用技术方案,做到程序高度可复用,业务高度可配置。
发明内容
本发明所要解决的技术问题是提供一种基于TCP长连接的服务实现方法和装置。
本发明解决上述技术问题的技术方案如下:一种基于TCP长连接的服务实现方法,包括:
步骤S1,主进程从配置文件中获取监听端口,通过绑定方法绑定主机网络协议IP和所述监听端口,并建立监听;
步骤S2,所述主进程接收客户端发送的连接请求,并判断连接请求数是否超过预设的连接数阈值;
步骤S3,如果所述连接请求数在所述预设的连接数阈值范围内,则所述主进程创建通讯子进程,并对所述通讯子进程进行初始化;
步骤S4,通过异步轮询机制处理文件描述符集合,并通过通讯管道数组异步调度业务子进程。
本发明的有益效果是:在TCP长连接的情况下,通过异步的通讯模型可以提高服务端的呑吐量;利用轮询方式,将连接与通讯模块分离,利用管道通讯,实现通讯与业务处理分离,通讯层面协议调整和后端业务逻辑调整互不影响,高度可复用,扩展性强。
在上述技术方案的基础上,本发明还可以做如下改进。
进一步,所述步骤S3包括:
步骤S31,创建子进程管理区共享内存块、通讯管道数组和所述业务子进程,其中,所述通讯管道数组包括业务请求通讯管道和业务应答通讯管道;
步骤S32,将所述业务子进程的信息、所述业务子进程的编号、管道信息和所述业务子进程的状态写入所述子进程管理区共享内存块;
步骤S33,调用系统函数启动所述业务子进程,并将套接字标识符ID、管道编号作为入参传入所述业务子进程。
进一步,所述步骤S4包括,重复执行步骤S41至步骤S47:
步骤S41,将所述通讯子进程加入超时信号处理函数;
步骤S42,初始化文件描述符集合,将所述套接字ID加入所述文件描述符集合;
步骤S43,遍历所述子进程管理区共享内存块,并判断所述业务子进程的运行状态;
步骤S44,如果所述业务子进程的运行状态为忙碌状态,则将所述业务应答通讯管道加入所述文件描述符集合;
步骤S45,通过异步轮询函数遍历所述文件描述符集合,并检测所述文件描述符集合的状态变化;
步骤S46,如果所述套接字ID发生变化,则所述通讯子进程调用套接字接收函数接收请求报文,并判断所述请求报文的报文类型;
步骤S47,如果所述业务应答通讯管道发生变化,则所述通讯子进程调用所述套接字接收函数接收所述业务应答通讯管道的应答内容,并将所述应答内容通过写函数返回给所述客户端。
进一步,所述步骤S46包括:
步骤S461,如果所述报文类型为访问控制类型,则所述通讯子进程根据所述访问控制类型调用不同的处理函数;
步骤S462,如果所述报文类型为业务报文类型,则所述通讯子进程将业务请求通过业务请求通讯管道写入业务子进程通讯管道,以使得所述业务子进程进行业务逻辑处理。
进一步,所述步骤S462包括,重复执行步骤S4622至步骤S4628:
步骤S4621,建立共享内存,将业务报文模板加载到所述共享内存中;
步骤S4622,监听所述业务子进程中业务请求通讯管道的变化;
步骤S4623,如果所述业务请求通讯管道发生变化,则读取所述业务请求通讯管道的数据;
步骤S4624,如果读取超时,则修改所述子进程管理区共享内存块,将所述业务子进程的运行状态设置为忙碌状态;
步骤S4625,根据业务关键字匹配所述业务报文模板得到业务报文字段,将所述业务报文字段构成键值对;
步骤S4626,调用业务处理进程获取业务处理结果信息;
步骤S4627,将所述业务处理结果信息写入所述业务应答通讯管道;
步骤S4628,修改所述子进程管理区共享内存块,并将所述业务子进程的运行状态设置为空闲状态。
本发明解决上述技术问题的技术方案如下:一种基于TCP长连接的服务实现装置,包括:
监听端口获取单元,用于主进程从配置文件中获取监听端口,通过绑定方法绑定主机网络协议IP和所述监听端口,并建立监听;
连接请求接收单元,用于所述主进程接收客户端发送的连接请求,并判断连接请求数是否超过预设的连接数阈值;
通讯子进程创建单元,用于所述连接请求数在所述预设的连接数阈值范围内,所述主进程创建通讯子进程,并对所述通讯子进程进行初始化;
异步调度单元,用于通过异步轮询机制处理文件描述符集合,并通过通讯管道数组异步调度业务子进程。
本发明的有益效果是:在TCP长连接的情况下,通过异步的通讯模型可以提高服务端的呑吐量;利用轮询方式,将连接与通讯模块分离,利用管道通讯,实现通讯与业务处理分离,通讯层面协议调整和后端业务逻辑调整互不影响,高度可复用,扩展性强。
在上述技术方案的基础上,本发明还可以做如下改进。
进一步,所述通讯子进程创建单元包括:
创建单元,用于创建子进程管理区共享内存块、通讯管道数组和所述业务子进程,其中,所述通讯管道数组包括业务请求通讯管道和业务应答通讯管道;
写入单元,用于将所述业务子进程的信息、所述业务子进程的编号、管道信息和所述业务子进程的状态写入所述子进程管理区共享内存块;
启动单元,用于调用系统函数启动所述业务子进程,并将套接字标识符ID、管道编号作为入参传入所述业务子进程。
进一步,所述异步调度单元包括:
通讯子进程加入单元,用于将所述通讯子进程加入超时信号处理函数;
套接字加入单元,用于初始化文件描述符集合,将所述套接字ID加入所述文件描述符集合;
业务子进程判断单元,用于遍历所述子进程管理区共享内存块,并判断所述业务子进程的运行状态;
业务应答通讯管道加入单元,用于在所述业务子进程的运行状态为忙碌状态的情况下,将所述业务应答通讯管道加入所述文件描述符集合;
检测单元,用于通过异步轮询函数遍历所述文件描述符集合,并检测所述文件描述符集合的状态变化;
报文类型判断单元,用于在所述套接字ID发生变化的情况下,所述通讯子进程调用套接字接收函数接收请求报文,并判断所述请求报文的报文类型;
调用单元,用于在所述业务应答通讯管道发生变化的情况下,所述通讯子进程调用所述套接字接收函数接收所述业务应答通讯管道的应答内容,并将所述应答内容通过写函数返回给所述客户端。
进一步,所述报文类型判断单元包括:
不同处理函数调用单元,用于在所述报文类型为访问控制类型的情况下,所述通讯子进程根据所述访问控制类型调用不同的处理函数;
业务逻辑处理单元,用于在所述报文类型为业务报文类型的情况下,所述通讯子进程将业务请求通过业务请求通讯管道写入业务子进程通讯管道,以使得所述业务子进程进行业务逻辑处理。
进一步,所述业务逻辑处理单元包括:
建立共享内存,将业务报文模板加载到所述共享内存中;
监听所述业务子进程中业务请求通讯管道的变化;
如果所述业务请求通讯管道发生变化,则读取所述业务请求通讯管道的数据;
如果读取超时,则修改所述子进程管理区共享内存块,将所述业务子进程的运行状态设置为忙碌状态;
根据业务关键字匹配所述业务报文模板得到业务报文字段,将所述业务报文字段构成键值对;
调用业务处理进程获取业务处理结果信息;
将所述业务处理结果信息写入所述业务应答通讯管道;
修改所述子进程管理区共享内存块,并将所述业务子进程的运行状态设置为空闲状态。
附图说明
图1为本发明实施例提供的一种基于TCP长连接的服务实现方法流程图;
图2为本发明实施例提供的一种基于TCP长连接的服务实现装置示意图;
图3为本发明实施例提供的进程模型示意图。
附图中,各标号所代表的部件列表如下:
10、监听端口获取单元,20、连接请求接收单元,30、通讯子进程创建单元,40、异步调度单元。
具体实施方式
以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
图1为本发明实施例提供的一种基于TCP长连接的服务实现方法流程图。
参照图1,步骤S1,主进程从配置文件中获取监听端口,通过绑定方法绑定主机网络协议IP和所述监听端口,并建立监听。
步骤S2,所述主进程接收客户端发送的连接请求,并判断连接请求数是否超过预设的连接数阈值。
步骤S3,如果所述连接请求数在所述预设的连接数阈值范围内,则所述主进程创建通讯子进程,并对所述通讯子进程进行初始化。
这里,同时给连接请求计数器加1。如果所述连接请求数超过所述预设的连接数阈值,则主进程拒绝所述客户端的新的连接访问,从而可以控制服务端的并发访问,防止系统连接资源被占满而导致异常。
步骤S4,通过异步轮询机制处理文件描述符集合,并通过通讯管道数组异步调度业务子进程。
在本实施例中,作为对图1所示实现方式的细化,所述步骤S3包括:
步骤S31,创建子进程管理区共享内存块、通讯管道数组和所述业务子进程,其中,所述通讯管道数组包括业务请求通讯管道和业务应答通讯管道;
步骤S32,将所述业务子进程的信息、所述业务子进程的编号、管道信息和所述业务子进程的状态写入所述子进程管理区共享内存块;
步骤S33,调用系统函数启动所述业务子进程,并将套接字标识符ID、管道编号作为入参传入所述业务子进程。
在本实施例中,作为对图1所示实现方式的细化,所述步骤S4包括,重复执行步骤S41至步骤S47:
步骤S41,将所述通讯子进程加入超时信号处理函数;
步骤S42,初始化文件描述符集合,将所述套接字ID加入所述文件描述符集合;
步骤S43,遍历所述子进程管理区共享内存块,并判断所述业务子进程的运行状态;
步骤S44,如果所述业务子进程的运行状态为忙碌状态,则将所述业务应答通讯管道加入所述文件描述符集合;
步骤S45,通过异步轮询函数遍历所述文件描述符集合,并检测所述文件描述符集合的状态变化;
步骤S46,如果所述套接字ID发生变化,则所述通讯子进程调用套接字接收函数接收请求报文,并判断所述请求报文的报文类型。
步骤S47,如果所述业务应答通讯管道发生变化,则表示业务子进程已处理完业务,所述通讯子进程调用所述套接字接收函数接收所述业务应答通讯管道的应答内容,并将所述应答内容通过写函数返回给所述客户端,此时,一个业务请求处理完成。
在本实施例中,作为对步骤S46所示实现方式的细化,所述步骤S46包括:
步骤S461,如果所述报文类型为访问控制类型,则所述通讯子进程根据所述访问控制类型调用不同的处理函数。
这里,如果所述报文类型为访问控制类型,则所述通讯子进程根据所述访问控制类型调用不同处理函数,如果是登录请求,调用登录处理函数,验证访问是否合法。
如果访问合法,则建立连接会话,返回会话ID。如果是登录退出请求,则调用登录退出处理函数,此时,连接请求数计数器-1,之后给客户端返回退出成功。
步骤S462,如果所述报文类型为业务报文类型,则所述通讯子进程将业务请求通过业务请求通讯管道写入业务子进程通讯管道,以使得所述业务子进程进行业务逻辑处理。
在本实施例中,作为对步骤S462所示实现方式的细化,所述步骤S462包括,重复执行步骤S4622至步骤S4628:
步骤S4621,建立共享内存,将业务报文模板加载到所述共享内存中;
这里,共享内存中存入两类数据,一是路由数据,二是业务解析规则数据。路由数据用于根据业务服务的请求参数调用不同服务;业务解析规则数据用于解析业务请求报文,即为报文解析模板。
具体地,路由数据为Key1value1和Key2value2,其中,Key1、Key2为路由关键字;value1、value2为路由值,即目标数据。
业务解析规则配置数据为:
BUSADDR=10.10.10.10
REQBODYINFO=xxxxxx
RSPBODYINFO=yyyyyy
REQBUSINFO=zzzzzz
REQBUSINFO=wwwwww
其中,xxxxxx和yyyyyy请求报文和应答报文的解析规则,即为报文解析模板。
步骤S4622,监听所述业务子进程中业务请求通讯管道的变化;
步骤S4623,如果所述业务请求通讯管道发生变化,则读取所述业务请求通讯管道的数据;
步骤S4624,如果读取超时,则修改所述子进程管理区共享内存块,将所述业务子进程的运行状态设置为忙碌状态;
步骤S4625,根据业务关键字匹配所述业务报文模板得到业务报文字段,将所述业务报文字段构成键值对;
步骤S4626,调用业务处理进程获取业务处理结果信息;
步骤S4627,将所述业务处理结果信息写入所述业务应答通讯管道;
步骤S4628,修改所述子进程管理区共享内存块,并将所述业务子进程的运行状态设置为空闲状态。
这里,通讯子进程管理的结构体定义如下:
在主进程中定义CHILD*cptr;在通讯子进程中创建cptr为共享内存memset((CHILD*)cptr,0,sizeof(CHILD)*max_proc);,供已建立连接的通讯子进程使用。
本实施例提供的一种基于TCP长连接的服务实现方法,主进程从配置文件中获取监听端口,主进程接收客户端发送的连接请求,并判断连接请求数是否超过预设的连接数阈值;如果所述连接请求数在所述预设的连接数阈值范围内,则所述主进程创建通讯子进程,并对所述通讯子进程进行初始化;通过异步轮询机制处理文件描述符集合,并通过通讯管道数组异步调度业务子进程,从而在少量连接数情况下,即可以达到上万并发量,提高服务端的呑吐量;利用轮询方式,将连接与通讯模块分离,利用管道通讯,实现通讯与业务处理分离,通讯层面协议调整和后端业务逻辑调整互不影响,高度可复用,扩展性强。
图2为本发明实施例提供的一种基于TCP长连接的服务实现装置示意图。
参照图2,TCP长连接的服务实现装置包括监听端口获取单元10、连接请求接收单元20、通讯子进程创建单元30和异步调度单元40。
监听端口获取单元10,用于主进程从配置文件中获取监听端口,通过绑定方法绑定主机网络协议IP和所述监听端口,并建立监听;
连接请求接收单元20,用于所述主进程接收客户端发送的连接请求,并判断连接请求数是否超过预设的连接数阈值;
通讯子进程创建单元30,用于所述连接请求数在所述预设的连接数阈值范围内,所述主进程创建通讯子进程,并对所述通讯子进程进行初始化;
异步调度单元40,用于通过异步轮询机制处理文件描述符集合,并通过通讯管道数组异步调度业务子进程。
在本实施例中,所述通讯子进程创建单元30包括:
创建单元(未示出),用于创建子进程管理区共享内存块、通讯管道数组和所述业务子进程,其中,所述通讯管道数组包括业务请求通讯管道和业务应答通讯管道;
写入单元(未示出),用于将所述业务子进程的信息、所述业务子进程的编号、管道信息和所述业务子进程的状态写入所述子进程管理区共享内存块;
启动单元(未示出),用于调用系统函数启动所述业务子进程,并将套接字标识符ID、管道编号作为入参传入所述业务子进程。
在本实施例中,所述异步调度单元40包括:
通讯子进程加入单元(未示出),用于将所述通讯子进程加入超时信号处理函数;
套接字加入单元(未示出),用于初始化文件描述符集合,将所述套接字ID加入所述文件描述符集合;
业务子进程判断单元(未示出),用于遍历所述子进程管理区共享内存块,并判断所述业务子进程的运行状态;
业务应答通讯管道加入单元(未示出),用于在所述业务子进程的运行状态为忙碌状态的情况下,将所述业务应答通讯管道加入所述文件描述符集合;
检测单元(未示出),用于通过异步轮询函数遍历所述文件描述符集合,并检测所述文件描述符集合的状态变化;
报文类型判断单元(未示出),用于在所述套接字ID发生变化的情况下,所述通讯子进程调用套接字接收函数接收请求报文,并判断所述请求报文的报文类型。
调用单元(未示出),用于在所述业务应答通讯管道发生变化的情况下,所述通讯子进程调用所述套接字接收函数接收所述业务应答通讯管道的应答内容,并将所述应答内容通过写函数返回给所述客户端。
在本实施例中,所述报文类型判断单元包括:
不同处理函数调用单元(未示出),用于在所述报文类型为访问控制类型的情况下,所述通讯子进程根据所述访问控制类型调用不同的处理函数;
业务逻辑处理单元(未示出),用于在所述报文类型为业务报文类型的情况下,所述通讯子进程将业务请求通过业务请求通讯管道写入业务子进程通讯管道,以使得所述业务子进程进行业务逻辑处理。
在本实施例中,所述业务逻辑处理单元包括:
建立共享内存,将业务报文模板加载到所述共享内存中;
监听所述业务子进程中业务请求通讯管道的变化;
如果所述业务请求通讯管道发生变化,则读取所述业务请求通讯管道的数据;
如果读取超时,则修改所述子进程管理区共享内存块,将所述业务子进程的运行状态设置为忙碌状态;
根据业务关键字匹配所述业务报文模板得到业务报文字段,将所述业务报文字段构成键值对;
调用业务处理进程获取业务处理结果信息;
将所述业务处理结果信息写入所述业务应答通讯管道;
修改所述子进程管理区共享内存块,并将所述业务子进程的运行状态设置为空闲状态。
本实施例提供的一种基于TCP长连接的服务实现装置,主进程从配置文件中获取监听端口,主进程接收客户端发送的连接请求,并判断连接请求数是否超过预设的连接数阈值;如果所述连接请求数在所述预设的连接数阈值范围内,则所述主进程创建通讯子进程,并对所述通讯子进程进行初始化;通过异步轮询机制处理文件描述符集合,并通过通讯管道数组异步调度业务子进程,从而在少量连接数情况下,即可以达到上万并发量,提高服务端的呑吐量;利用轮询方式,将连接与通讯模块分离,利用管道通讯,实现通讯与业务处理分离,通讯层面协议调整和后端业务逻辑调整互不影响,高度可复用,扩展性强。
图3为本发明实施例提供的进程模型示意图。
参照图3,对于每一个客户端发送的连接请求,主进程创建通讯子进程,通讯子进程接收客户端发送的报文数据,并判断报文数据的报文类型,如果报文类型为访问类型,则向所述客户端回复相应的响应信息;如果报文类型为业务数据,则通过系统调用业务处理进程,业务子进程与业务处理进程通过管道交互,即异步处理。
通过进程模型,将传输控制协议(Transmission Control Protocol,TCP)长连接请求进行分类处理,处理策略不同。如果报文类型为访问类型,由于请求频率低,由通讯子进程直接处理,不影响性能;如果报文类型为业务数据,由于请求量大,由业务子进程异步调用业务处理进程进行处理,大大提升处理效率。
将业务处理进程与主进程、通讯子进程、业务子进程分离,可以使主进程与业务无关,针对不同TCP长连接,开发定制协议适配器即可,无需对主进程进行改动,从而保持高度复用和稳定性。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于TCP长连接的服务实现方法,其特征在于,包括:
步骤S1,主进程从配置文件中获取监听端口,通过绑定方法绑定主机网络协议IP和所述监听端口,并建立监听;
步骤S2,所述主进程接收客户端发送的连接请求,并判断连接请求数是否超过预设的连接数阈值;
步骤S3,如果所述连接请求数在所述预设的连接数阈值范围内,则所述主进程创建通讯子进程,并对所述通讯子进程进行初始化;
步骤S4,通过异步轮询机制处理文件描述符集合,并通过通讯管道数组异步调度业务子进程。
2.根据权利要求1所述的一种基于TCP长连接的服务实现方法,其特征在于,所述步骤S3包括:
步骤S31,创建子进程管理区共享内存块、通讯管道数组和所述业务子进程,其中,所述通讯管道数组包括业务请求通讯管道和业务应答通讯管道;
步骤S32,将所述业务子进程的信息、所述业务子进程的编号、管道信息和所述业务子进程的状态写入所述子进程管理区共享内存块;
步骤S33,调用系统函数启动所述业务子进程,并将套接字标识符ID、管道编号作为入参传入所述业务子进程。
3.根据权利要求1所述的一种基于TCP长连接的服务实现方法,其特征在于,所述步骤S4包括,重复执行步骤S41至步骤S47:
步骤S41,将所述通讯子进程加入超时信号处理函数;
步骤S42,初始化文件描述符集合,将套接字ID加入所述文件描述符集合;
步骤S43,遍历所述子进程管理区共享内存块,并判断所述业务子进程的运行状态;
步骤S44,如果所述业务子进程的运行状态为忙碌状态,则将所述业务应答通讯管道加入所述文件描述符集合;
步骤S45,通过异步轮询函数遍历所述文件描述符集合,并检测所述文件描述符集合的状态变化;
步骤S46,如果所述套接字ID发生变化,则所述通讯子进程调用套接字接收函数接收请求报文,并判断所述请求报文的报文类型;
步骤S47,如果所述业务应答通讯管道发生变化,则所述通讯子进程调用所述套接字接收函数接收所述业务应答通讯管道的应答内容,并将所述应答内容通过写函数返回给所述客户端。
4.根据权利要求3所述的一种基于TCP长连接的服务实现方法,其特征在于,所述步骤S46包括:
步骤S461,如果所述报文类型为访问控制类型,则所述通讯子进程根据所述访问控制类型调用不同的处理函数;
步骤S462,如果所述报文类型为业务报文类型,则所述通讯子进程将业务请求通过业务请求通讯管道写入业务子进程通讯管道,以使得所述业务子进程进行业务逻辑处理。
5.根据权利要求4所述的一种基于TCP长连接的服务实现方法,其特征在于,所述步骤S462包括,重复执行步骤S4622至步骤S4628:
步骤S4621,建立共享内存,将业务报文模板加载到所述共享内存中;
步骤S4622,监听所述业务子进程中业务请求通讯管道的变化;
步骤S4623,如果所述业务请求通讯管道发生变化,则读取所述业务请求通讯管道的数据;
步骤S4624,如果读取超时,则修改所述子进程管理区共享内存块,将所述业务子进程的运行状态设置为忙碌状态;
步骤S4625,根据业务关键字匹配所述业务报文模板得到业务报文字段,将所述业务报文字段构成键值对;
步骤S4626,调用业务处理进程获取业务处理结果信息;
步骤S4627,将所述业务处理结果信息写入所述业务应答通讯管道;
步骤S4628,修改所述子进程管理区共享内存块,并将所述业务子进程的运行状态设置为空闲状态。
6.一种基于TCP长连接的服务实现装置,其特征在于,包括:
监听端口获取单元,用于主进程从配置文件中获取监听端口,通过绑定方法绑定主机网络协议IP和所述监听端口,并建立监听;
连接请求接收单元,用于所述主进程接收客户端发送的连接请求,并判断连接请求数是否超过预设的连接数阈值;
通讯子进程创建单元,用于所述连接请求数在所述预设的连接数阈值范围内,所述主进程创建通讯子进程,并对所述通讯子进程进行初始化;
异步调度单元,用于通过异步轮询机制处理文件描述符集合,并通过通讯管道数组异步调度业务子进程。
7.根据权利要求6所述的一种基于TCP长连接的服务实现装置,其特征在于,所述通讯子进程创建单元包括:
创建单元,用于创建子进程管理区共享内存块、通讯管道数组和所述业务子进程,其中,所述通讯管道数组包括业务请求通讯管道和业务应答通讯管道;
写入单元,用于将所述业务子进程的信息、所述业务子进程的编号、管道信息和所述业务子进程的状态写入所述子进程管理区共享内存块;
启动单元,用于调用系统函数启动所述业务子进程,并将套接字标识符ID、管道编号作为入参传入所述业务子进程。
8.根据权利要求6所述的一种基于TCP长连接的服务实现装置,其特征在于,所述异步调度单元包括:
通讯子进程加入单元,用于将所述通讯子进程加入超时信号处理函数;
套接字加入单元,用于初始化文件描述符集合,将套接字ID加入所述文件描述符集合;
业务子进程判断单元,用于遍历所述子进程管理区共享内存块,并判断所述业务子进程的运行状态;
业务应答通讯管道加入单元,用于在所述业务子进程的运行状态为忙碌状态的情况下,将所述业务应答通讯管道加入所述文件描述符集合;
检测单元,用于通过异步轮询函数遍历所述文件描述符集合,并检测所述文件描述符集合的状态变化;
报文类型判断单元,用于在所述套接字ID发生变化的情况下,所述通讯子进程调用套接字接收函数接收请求报文,并判断所述请求报文的报文类型;
调用单元,用于在所述业务应答通讯管道发生变化的情况下,所述通讯子进程调用所述套接字接收函数接收所述业务应答通讯管道的应答内容,并将所述应答内容通过写函数返回给所述客户端。
9.根据权利要求8所述的一种基于TCP长连接的服务实现装置,其特征在于,所述报文类型判断单元包括:
不同处理函数调用单元,用于在所述报文类型为访问控制类型的情况下,所述通讯子进程根据所述访问控制类型调用不同的处理函数;
业务逻辑处理单元,用于在所述报文类型为业务报文类型的情况下,所述通讯子进程将业务请求通过业务请求通讯管道写入业务子进程通讯管道,以使得所述业务子进程进行业务逻辑处理。
10.根据权利要求9所述的一种基于TCP长连接的服务实现装置,其特征在于,所述业务逻辑处理单元包括:
建立共享内存,将业务报文模板加载到所述共享内存中;
监听所述业务子进程中业务请求通讯管道的变化;
如果所述业务请求通讯管道发生变化,则读取所述业务请求通讯管道的数据;
如果读取超时,则修改所述子进程管理区共享内存块,将所述业务子进程的运行状态设置为忙碌状态;
根据业务关键字匹配所述业务报文模板得到业务报文字段,将所述业务报文字段构成键值对;
调用业务处理进程获取业务处理结果信息;
将所述业务处理结果信息写入所述业务应答通讯管道;
修改所述子进程管理区共享内存块,并将所述业务子进程的运行状态设置为空闲状态。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610230675.4A CN105763634B (zh) | 2016-04-14 | 2016-04-14 | 一种基于tcp长连接的服务实现方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610230675.4A CN105763634B (zh) | 2016-04-14 | 2016-04-14 | 一种基于tcp长连接的服务实现方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105763634A CN105763634A (zh) | 2016-07-13 |
CN105763634B true CN105763634B (zh) | 2019-01-04 |
Family
ID=56333857
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610230675.4A Active CN105763634B (zh) | 2016-04-14 | 2016-04-14 | 一种基于tcp长连接的服务实现方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105763634B (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107135279B (zh) * | 2017-07-07 | 2020-11-27 | 网宿科技股份有限公司 | 一种处理长连接建立请求的方法和装置 |
CN107688502B (zh) * | 2017-08-18 | 2021-04-06 | 苏州科达特种视讯有限公司 | 进程间通信方法及装置 |
CN108132835A (zh) * | 2017-12-29 | 2018-06-08 | 五八有限公司 | 基于多进程的任务请求处理方法、装置和系统 |
CN108762234B (zh) * | 2018-06-11 | 2021-05-18 | 北京经纬恒润科技股份有限公司 | 一种车身控制器及其控制方法 |
CN108874564B (zh) * | 2018-06-29 | 2021-11-26 | 武汉斗鱼网络科技有限公司 | 一种进程间通信方法、电子设备及可读存储介质 |
CN109309735B (zh) * | 2018-11-27 | 2022-02-22 | 深圳市网心科技有限公司 | 连接处理方法、服务器、系统及存储介质 |
CN111385251A (zh) * | 2018-12-28 | 2020-07-07 | 武汉斗鱼网络科技有限公司 | 一种提高客户端运行稳定性的方法、系统、服务器及存储介质 |
CN110324317B (zh) * | 2019-05-31 | 2022-11-15 | 平安科技(深圳)有限公司 | 业务处理方法、装置、设备及存储介质 |
CN111338893B (zh) * | 2020-02-20 | 2023-07-18 | 深圳市腾讯计算机系统有限公司 | 进程日志处理方法、装置、计算机设备以及存储介质 |
CN112383617B (zh) * | 2020-11-12 | 2024-05-24 | 百度在线网络技术(北京)有限公司 | 进行长连接的方法、装置、终端设备以及介质 |
CN112688969A (zh) * | 2021-03-12 | 2021-04-20 | 成都云智天下科技股份有限公司 | 一种基于端口复用和tcp加密技术的内网穿透方法 |
CN113923249A (zh) * | 2021-10-12 | 2022-01-11 | 工银科技有限公司 | 一种高性能网络长连接建立方法及装置 |
CN114710496B (zh) * | 2022-04-24 | 2024-05-14 | 中国工商银行股份有限公司 | 一种多节点负载均衡方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030074370A1 (en) * | 2001-10-12 | 2003-04-17 | Gargano Sharon R. | System and method for object based delivery of on-line courses and content |
CN1975680A (zh) * | 2006-11-27 | 2007-06-06 | 浙江大学 | 基于Java的进程间异步通信的实现方法 |
CN102624889A (zh) * | 2012-03-06 | 2012-08-01 | 河海大学 | 一种基于接收与处理分离的海量数据并发性处理方法 |
CN102724132A (zh) * | 2012-06-29 | 2012-10-10 | 杭州迪普科技有限公司 | 一种提高tcp连接复用处理效率的方法及装置 |
-
2016
- 2016-04-14 CN CN201610230675.4A patent/CN105763634B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030074370A1 (en) * | 2001-10-12 | 2003-04-17 | Gargano Sharon R. | System and method for object based delivery of on-line courses and content |
CN1975680A (zh) * | 2006-11-27 | 2007-06-06 | 浙江大学 | 基于Java的进程间异步通信的实现方法 |
CN102624889A (zh) * | 2012-03-06 | 2012-08-01 | 河海大学 | 一种基于接收与处理分离的海量数据并发性处理方法 |
CN102724132A (zh) * | 2012-06-29 | 2012-10-10 | 杭州迪普科技有限公司 | 一种提高tcp连接复用处理效率的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN105763634A (zh) | 2016-07-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105763634B (zh) | 一种基于tcp长连接的服务实现方法和装置 | |
CN109873736A (zh) | 一种微服务监控方法及系统 | |
CN100544272C (zh) | 网络设备管理系统及其控制方法 | |
WO2019141111A1 (zh) | 通信方法和通信装置 | |
CN108768826A (zh) | 基于MQTT和Kafka高并发场景下的消息路由方法 | |
CN101848235B (zh) | 一种支持nat穿越的实时多媒体数据p2p传输方案 | |
US11856065B2 (en) | Data transmission for service integration between a virtual private cloud and an intranet | |
US20100306387A1 (en) | Network interface device | |
CN107528891B (zh) | 一种基于WebSocket的自动集群方法及其系统 | |
US20120195188A1 (en) | Control method of virtual link discovery and system for fibre channel over ethernet protocol | |
CN110120919B (zh) | 一种用于容器网络的网络资源隔离方法和系统 | |
US8527661B1 (en) | Gateway for connecting clients and servers utilizing remote direct memory access controls to separate data path from control path | |
CN112738184B (zh) | 一种插件式动态注册分布式微服务网关系统 | |
CN108199865A (zh) | 一种基于发布订阅的路由服务实现方法 | |
CN105991412A (zh) | 消息推送方法及装置 | |
CN109547541A (zh) | 雾计算环境下基于过滤及分配机制的节点低开销协作方法 | |
CN115795400B (zh) | 面向大数据分析的应用融合系统 | |
CN114866528A (zh) | 一种基于MQTT和Websocket的数据通讯方法 | |
CN112887356A (zh) | 共享內存的数据分发服务的系统及其运作方法 | |
US20070076630A1 (en) | Peer name resolution protocol simple application program interface | |
CN114338769B (zh) | 访问请求的处理方法及装置 | |
US8762485B2 (en) | Information system having computer and storage apparatus coupled to network | |
CN106789287A (zh) | 前端负载均衡器、后端服务器及注册方法 | |
CN109951532B (zh) | 一种基于dpdk的流量模型自动变换装置 | |
CN105577433B (zh) | 一种acs集群管理方法、装置和系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |