CN101087314B - 一种应用程序跨进程使用套接字服务的系统及方法 - Google Patents
一种应用程序跨进程使用套接字服务的系统及方法 Download PDFInfo
- Publication number
- CN101087314B CN101087314B CN2007100744543A CN200710074454A CN101087314B CN 101087314 B CN101087314 B CN 101087314B CN 2007100744543 A CN2007100744543 A CN 2007100744543A CN 200710074454 A CN200710074454 A CN 200710074454A CN 101087314 B CN101087314 B CN 101087314B
- Authority
- CN
- China
- Prior art keywords
- socket
- module
- application program
- sockets
- pseudo
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Telephonic Communication Services (AREA)
Abstract
本发明适用于通信技术领域,提供了一种应用程序跨进程使用套接字服务的系统及方法,所述系统包括:套接字接口模块,所述套接字接口模块为分布在不同进程的所述应用程序提供套接字服务;伪套接字模块,所述伪套接字模块与所述应用程序运行于同一进程,当接收到应用程序调用跨进程的套接字接口的请求时,发送请求消息;以及代理模块,所述代理模块与所述套接字接口模块运行于同一进程,当接收所述伪套接字模块发送的请求消息后,向所述套接字接口模块发送调用套接字接口的请求,并将所述套接字接口模块返回的调用结果通过响应消息返回给所述伪套接字模块;所述伪套接字模块接收到所述响应消息后将调用结果返回给所述应用进程。
Description
技术领域
本发明属于通信技术领域,尤其涉及一种应用程序跨进程使用套接字服务的系统及方法。
背景技术
套接字(socket)是网络编程的应用程序接口(application programminginterface,API)。应用层通过传输层进行数据通信时,会遇到同时为多个应用程序进程提供并发服务的问题,多个连接或多个应用程序进程可能需要通过同一个传输控制协议(Transfer Control Protocol,TCP)端口传输数据。为了区别不同的连接和应用程序进程,许多计算机操作系统为应用程序与TCP/IP(Internet Protocol)的交互提供了socket接口。如图1所示,应用层可以和传输层通过Socket接口区分来自不同网络连接或应用程序进程的通信,实现数据传输的并发服务。
目前,多进程路由器架构逐步变成主流,多进程环境中跨进程使用socket服务的需求也越来越强烈,但目前的技术仍是只能基于操作系统的socket,没有明确的方法来实现跨进程提供socket服务。
发明内容
本发明实施例的目的在于提供一种跨进程使用socket服务的系统,实现跨进程使用socket服务。
本发明实施例是这样实现的,一种跨进程使用socket服务的系统,所述系统包括:
套接字接口模块,所述套接字接口模块为分布在不同进程的所述应用程序提供套接字服务,所述套接字接口模块的接口函数包括同步函数和异步函数;
伪套接字模块,所述伪套接字模块与所述应用程序运行于同一进程,当接收到应用程序调用跨进程的套接字接口的请求时,发送请求消息;以及
代理模块,所述代理模块与所述套接字接口模块运行于同一进程,当接收所述伪套接字模块发送的请求消息后,向所述套接字接口模块发送调用套接字接口的请求,并将所述套接字接口模块返回的调用结果通过响应消息返回给所述伪套接字模块;
所述伪套接字模块接收到所述响应消息后将调用结果返回给所述应用进程。
本发明实施例的另一目的在于提供跨进程使用socket服务的方法。
一种应用程序跨进程使用套接字服务的方法,所述方法包括:
应用程序向伪套接字模块发送调用套接字接口的请求;
伪套接字模块根据所述应用程序的调用发送请求消息;
代理模块根据接收到的所述伪套接字模块发送的请求消息,向套接字接口模块发送调用套接字接口的请求,并将所述套接字接口模块返回的调用结果通过响应消息返回给所述伪套接字模块,所述套接字接口模块的接口函数包括同步函数和异步函数;
所述伪套接字模块接收到所述响应消息后将调用结果返回给所述应用进程。
本发明实施例通过将套接字接口延伸到应用程序所在的进程中,实现了跨进程环境下应用程序仍可以继续使用套接字服务,而且应用进程与套接字接口既可以在同一块的单板上也可以在两块单板上。
附图说明
图1是现有技术提供的socket服务架构图;
图2是本发明实施例提供的应用程序跨进程使用socket服务的系统200的结构图;
图3是本发明实施例提供的系统200实现同步函数调用的流程图;
图4是本发明实施例提供的系统200实现异步函数调用的流程图;
图5~6是本发明实施例提供的实现socket stub并行线程的示意图;
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
图2示出了本发明实施例提供的应用程序跨进程使用socket服务的系统200,包括:分布在不同进程的应用程序201和socket接口模块202、伪套接字模块(socket lib)203以及套接字代理模块(socket stub)204,其中,socket lib203作为一个伪socket模块与应用程序201运行于同一进程,并且向应用程序201提供标准socket编程接口,socket lib203根据应用程序201的socket函数调用,发送请求消息,向相应的协议栈进程建立联系,socket stub204作为一个套接字代理模块与socket接口模块202运行于同一进程,socket stub204接收并分析来自socket lib203的请求消息,发现是socket调用后,它将调用socket接口模块202中真正的socket函数,并将socket函数返回的结果发送给socket lib203。stub-lib机制将进程间的通讯对应用程序201全部屏蔽,使得应用程序201好像直接使用socket接口,感觉不到跨进程调用或跨板跨进程调用。即将socket接口进行跨进程延伸,socket接口模块202本身不改变。
在本发明一实施例中,socket lib203中包括一进程间通信(Inter-ProcessConnection,IPC)消息转换单元2031,用于将所述应用程序调用套接字接口的调用请求转换为IPC消息后发送到socket stub204,而socket stub204中也包括一IPC消息转换单元2031,用于将socket接口模块202返回的函数调用结果转换为IPC消息后返回给socket lib203。
Socket接口模块202的接口函数分为两类:同步函数和异步函数。同步函数在完成指定的任务之前,不允许程序调用另一个函数,在Windows下还会阻塞本线程消息的发送,例如:socket、connect、bind、accept函数等。异步函数在操作启动之后,如果可以立即得到结果就返回结果,否则不等任务完成,就返回表示结果需要等待的错误信息,例如:数据接收、发送、事件等。
为延伸socket接口模块202的socket接口,本发明实施例提供的应用程序跨进程使用socket服务的系统200实现同步函数调用的具体流程如图3所示,详述如下:
在步骤1中,应用程序201调用socket lib203提供的socket函数;
在步骤2中,socket lib203将该调用转换成IPC消息发送给socket stub204,利用信号量阻塞住应用程序201;
在本发明一实施例中,socket lib203中还包括一抑制单元,用于使用信号量阻塞应用程序201。
在步骤3中,socket stub204分析来自socket lib203的IPC请求,发现是socket()调用,向socket接口模块202调用协议栈真正的socket函数;
当socket stub204接收到IPC消息,根据消息中包含的消息类型、进程id(identity)和socket id,调用socket接口模块202中相应的socket函数。
在步骤4中,socket函数调用返回,将结果返回给socket stub204;
在步骤5中,socket stub204将结果转换成IPC消息发送给socket lib203;
在步骤6中,socket lib203分析该消息,根据socket id解除相应应用程序201的阻塞,并将结果返回给相应的调用进程。
当存在多个应用程序调用进程时,为了保证socket lib203能将来自socketstub204的响应能正确地提交给合适的调用进程,socket lib203会保存应用程序201的信息,例如进程id、线程id、socket id、protocol等。同样地,为了保证socket stub204能将结果返回给合适的调用者,它除了和socket lib203维护同样的信息外,还要维护额外的信息,例如message queue id等。
为了实现异步调用,避免应用程序201阻塞在某些socket应用程序接口调用上,socket接口模块202中包括一个异步事件通知接口,向应用程序201通知发事件,例如:连接成功、可以读数据、TCP服务器与TCP客户端的连接存在等,使得应用程序201可以发送数据、读数据、接受外来TCP连接等。以socket接口模块202通知应用程序201读取数据为例,参考图4,详述如下:
在步骤1中,socket接口模块202通过IPC向应用程序201发送异步事件通知,指示有数据可用;
在步骤2中,应用程序201收到socket接口模块202发来的通知后,调用read()函数;
在步骤3中,socket lib203发送IPC请求给socket stub204;
在步骤4中,socket stub204分析来自socket lib203的请求并调用socket接口模块202中真正的read()函数;
在步骤5中,真正的read()函数将结果返回socket stub204;
在步骤6中,socket stub204将结果转换成IPC响应消息发送给socketlib203;
在步骤7中,socket lib203分析来自socket stub204的消息并将结果返回给合适的调用进程。
在本发明一实施例中,如图5所示,Socket lib203模块可同时处理来自所在进程多个线程的请求,socket stub204亦可同时处理来自多个进程的请求,并且socket stub204可以运行多个实例,实现负载分担,即通过在socket接口模块202所在的进程中启动多个stub线程,根据负载均衡情况为来自不同进程的socket服务请求分配不同的线程,使得在多核/多CPU逐渐成为趋势的情况,程序能够高效率的并行运行。为了实现socket stub的并行线程,socket stub204中包括一个公共消息单元2041,用于分配线程,如图6所示。由于socket lib203对于socket stub204是唯一的,也就是一个socket lib203仅与一个socket stub204通讯,所以只要确立通讯关系后socket lib203就一直与该socket stub204通讯,而socket stub204中根据应用进程id和socket id的对应关系,也知道与哪个socket lib203通讯,所以只要将socket lib203与某个socket stub204先建立联系就能实现并行,具体实现流程如下:
1.socket lib203向公共消息单元2041申请服务;
2.公共消息单元2041按照负载分配策略分配一个socket stub线程,将该线程的IPC消息句柄(handle)返回给socket lib203;
假设外部有十个应用进程,那么可以每五个启动一个stub线程。具体的分配策略可以是轮流分配,例如:第一个属于stubl,第二个属于stub2,第三个属于stubl......
3.socket lib203根据IPC handle与对应的socket stub线程通讯。
有关socket lib203与socket stub204之间的后续通讯过程参考图3和图4及其对应的文字说明,不再赘述。
本发明实施例通过使用stub-lib机制将socket接口延伸到应用程序所在的进程中,实现了跨进程环境下应用程序仍可以继续使用socket服务,将协议栈中的socket服务延伸到所有应用进程,应用进程与socket接口既可以在同一个单板上也可以跨单板。此外,由于socket服务本身和应用程序分布在不同的进程中,这种客观上的分离使得多进程环境下,当单进程需要进行升级时,TCP连接能够继续维持不断开。同样,当socket接口和应用程序部署在不同的单板上时,例如:socket接口部署在接口板上,而应用程序部署在主控板,此时主控板可以倒换,而接口板上的TCP连接继续维持,所以本发明实施例可作为一种基于TCP连接的应用程序的高可用性解决方案。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (16)
1.一种应用程序跨进程使用套接字服务的系统,其特征在于,所述系统包括:
套接字接口模块,所述套接字接口模块为分布在不同进程的所述应用程序提供套接字服务,所述套接字接口模块的接口函数包括同步函数和异步函数;
伪套接字模块,所述伪套接字模块与所述应用程序运行于同一进程,当接收到应用程序调用跨进程的套接字接口的请求时,发送请求消息;以及
代理模块,所述代理模块与所述套接字接口模块运行于同一进程,当接收所述伪套接字模块发送的请求消息后,向所述套接字接口模块发送调用套接字接口的请求,并将所述套接字接口模块返回的调用结果通过响应消息返回给所述伪套接字模块;
所述伪套接字模块接收到所述响应消息后将调用结果返回给所述应用进程。
2.如权利要求1所述的应用程序跨进程使用套接字服务的系统,其特征在于,所述伪套接字模块进一步包括:
进程间通信消息转换单元,用于将所述应用程序调用套接字接口模块的调用请求转换为进程间通信请求消息发送到所述代理模块。
3.如权利要求1所述的应用程序跨进程使用套接字服务的系统,其特征在于,所述代理模块进一步包括:
进程间通信消息转换单元,用于将所述套接字接口模块返回的调用结果转换为进程间通信响应消息返回给所述伪套接字模块。
4.如权利要求1所述的应用程序跨进程使用套接字服务的系统,其特征在于,当所述应用程序调用所述跨进程的套接字接口模块的同步函数时,所述伪套接字模块进一步包括:
抑制单元,用于使用信号量阻塞所述应用程序。
5.如权利要求1所述的应用程序跨进程使用套接字服务的系统,其特征在于,所述套接字接口模块包括:
异步事件通知接口,用于向所述应用程序发送异步事件通知。
6.如权利要求1所述的应用程序跨进程使用套接字服务的系统,其特征在于,所述代理模块包括:
公共消息单元,用于管理代理模块的多个代理线程,当接收到所述伪套接字模块的请求时,根据负载分配策略为所述伪套接字模块分配相应的代理线程。
7.如权利要求6所述的应用程序跨进程使用套接字服务的系统,其特征在于,所述公共消息单元为所述伪套接字模块分配代理线程的步骤通过向所述伪套接字模块返回该代理线程的进程间通信消息句柄实现。
8.如权利要求6所述的应用程序跨进程使用套接字服务的系统,其特征在于,所述负载分配策略包括轮流分配。
9.一种应用程序跨进程使用套接字服务的方法,其特征在于,所述方法包括:
应用程序向伪套接字模块发送调用套接字接口的请求;
伪套接字模块根据所述应用程序的调用发送请求消息;
代理模块根据接收到的所述伪套接字模块发送的请求消息,向套接字接口模块发送调用套接字接口的请求,并将所述套接字接口模块返回的调用结果通过响应消息返回给所述伪套接字模块,所述套接字接口模块的接口函数包括同步函数和异步函数;
所述伪套接字模块接收到所述响应消息后将调用结果返回给所述应用进程。
10.如权利要求9所述的应用程序跨进程使用套接字服务的方法,其特征在于,所述伪套接字模块根据所述应用程序的调用向所述代理模块发送请求消息的步骤包括:
将所述应用程序的调用转换为进程间通信请求消息发送到所述代理模块。
11.如权利要求9所述的应用程序跨进程使用套接字服务的方法,其特征在于,所述代理模块将所述套接字接口模块返回的调用结果通过响应消息返回给所述伪套接字模块的步骤包括:
将所述套接字接口模块返回的调用结果转换为进程间通信响应消息返回给所述伪套接字模块。
12.如权利要求9所述的应用程序跨进程使用套接字服务的方法,其特征在于,当所述应用程序调用所述套接字的同步函数时,所述方法还包括下述步骤:
所述伪套接字模块使用信号量阻塞所述应用程序。
13.如权利要求9所述的应用程序跨进程使用套接字服务的方法,其特征在于,当所述应用程序调用所述套接字的异步函数时,所述方法还包括下述步骤:
所述套接字接口模块向所述应用程序发送异步事件通知。
14.如权利要求9所述的应用程序跨进程使用套接字服务的方法,其特征在于,所述代理模块包括多个代理线程,当接收到所述伪套接字模块的请求时,所述方法还包括下述步骤:
根据负载分配策略为所述伪套接字模块分配相应的代理线程。
15.如权利要求14所述的应用程序跨进程使用套接字服务的方法,其特征在于,所述为伪套接字模块分配相应的代理线程的步骤通过向所述伪套接字模块返回该代理线程的进程间通信消息句柄实现。
16.如权利要求14所述的应用程序跨进程使用套接字服务的方法,其特征在于,所述负载分配策略为轮流分配。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2007100744543A CN101087314B (zh) | 2007-05-15 | 2007-05-15 | 一种应用程序跨进程使用套接字服务的系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2007100744543A CN101087314B (zh) | 2007-05-15 | 2007-05-15 | 一种应用程序跨进程使用套接字服务的系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101087314A CN101087314A (zh) | 2007-12-12 |
CN101087314B true CN101087314B (zh) | 2010-11-10 |
Family
ID=38938067
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2007100744543A Expired - Fee Related CN101087314B (zh) | 2007-05-15 | 2007-05-15 | 一种应用程序跨进程使用套接字服务的系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101087314B (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102223307B (zh) * | 2011-06-29 | 2017-02-15 | 中兴通讯股份有限公司 | 一种处理套接字的方法、分组数据传输的方法及装置 |
CN102339234B (zh) * | 2011-07-12 | 2013-04-17 | 迈普通信技术股份有限公司 | 一种协议栈运行装置和方法 |
CN103179087B (zh) * | 2011-12-21 | 2016-07-06 | 上海飞田通信技术有限公司 | 应用层到TCP层异步Socket数据传输方法及系统 |
CN103246557A (zh) * | 2012-02-07 | 2013-08-14 | 腾讯科技(深圳)有限公司 | 一种跨进程调用应用信息的方法及装置 |
CN103294561B (zh) * | 2012-03-05 | 2016-04-13 | 腾讯科技(深圳)有限公司 | 进程运行方法及装置 |
CN102780764B (zh) * | 2012-06-28 | 2015-12-16 | 北京奇虎科技有限公司 | 一种代理通信系统及方法 |
CN103970601B (zh) * | 2013-02-06 | 2019-03-05 | 北京壹人壹本信息科技有限公司 | 执行操作指令方法和装置 |
CN104636210B (zh) | 2013-11-07 | 2018-11-09 | 腾讯科技(深圳)有限公司 | 一种实现进程间数据交换的方法及装置 |
CN105357273B (zh) * | 2015-09-30 | 2018-06-19 | 山东乾云启创信息科技股份有限公司 | 异步通信模式下socket通信与进程管理通用平台及方法 |
CN107766094B (zh) * | 2016-08-18 | 2021-07-09 | 斑马智行网络(香港)有限公司 | 控制应用程序间相互启动的方法、装置、设备 |
CN107329838A (zh) * | 2017-05-23 | 2017-11-07 | 努比亚技术有限公司 | 一种业务交互方法、终端和计算机可读存储介质 |
CN108737397B (zh) * | 2018-05-09 | 2021-02-02 | 烽火通信科技股份有限公司 | 一种实现路由器中业务与协议栈之间数据交互的方法 |
CN109189584B (zh) * | 2018-07-05 | 2021-02-19 | 北京三快在线科技有限公司 | 应用程序之间的通信方法、装置、电子设备及存储介质 |
CN110532045A (zh) * | 2019-09-04 | 2019-12-03 | 深圳市迅雷网络技术有限公司 | 一种跨进程调用方法及相关装置 |
CN110620778B (zh) * | 2019-09-25 | 2021-11-30 | 北京简约纳电子有限公司 | 一种同时支持socket同步和异步通信方式的方法 |
CN112596931B (zh) * | 2020-12-31 | 2023-04-07 | 五八有限公司 | 一种跨进程通信方法、装置、电子设备及存储介质 |
-
2007
- 2007-05-15 CN CN2007100744543A patent/CN101087314B/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN101087314A (zh) | 2007-12-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101087314B (zh) | 一种应用程序跨进程使用套接字服务的系统及方法 | |
CN1135800C (zh) | 用于具有处理器群集的电信平台的因特网协议处理器 | |
US10031789B2 (en) | Generic distributed processing for multi-agent systems | |
CN102316160B (zh) | 网站系统及其通信方法 | |
US8898191B2 (en) | Method for providing connections for application processes to a database server | |
US6922727B2 (en) | Method and system for managing parallel data transfer through multiple sockets to provide scalability to a computer network | |
US7774403B2 (en) | System and method for concentration and load-balancing of requests | |
CN110710168A (zh) | 跨隔离的网络堆栈的智能线程管理 | |
CN1815979A (zh) | 用于提供网络连接的设备和方法 | |
WO2011130940A1 (zh) | 多业务统一处理方法及统一业务平台 | |
CN102546778B (zh) | 基于代理跨平台的无线网络接入控制器板间通信方法 | |
CN108063813B (zh) | 一种集群环境下密码服务网络并行化的方法与系统 | |
US20110258318A1 (en) | Network device and method for dynamically allocating connection resources | |
WO2009128837A1 (en) | Diameter bus communications between processing nodes of a network element | |
CN1455347A (zh) | 一种分布式并行调度宽带网络服务器系统 | |
EP2439881B1 (en) | Cluster system and request message distribution method for processing multi-node transaction | |
JP5050358B2 (ja) | データ複製システムおよびデータ複製方法 | |
CN115022408A (zh) | 基于服务网格的数据传输方法及装置、电子设备 | |
CN1897505A (zh) | 以太网无源光网络中光网络单元的基于询问的注册方法 | |
Woodall et al. | TEG: A high-performance, scalable, multi-network point-to-point communications methodology | |
JP4021780B2 (ja) | 計算機ノード、クラスタシステム、クラスタ管理方法、クラスタ管理プログラム | |
CN1163082C (zh) | 多模块七号信令系统信令连接控制部分分布任务处理方法 | |
CN201422116Y (zh) | 一种集群网络系统 | |
CN102316136A (zh) | 一种双控制器系统的负载均衡方法 | |
WO2012071860A1 (zh) | 多住户单元的单板间同步通信的方法及多住户单元 |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20101110 Termination date: 20150515 |
|
EXPY | Termination of patent right or utility model |