著录项信息
| 专利名称 | 一种应用程序跨进程使用套接字服务的系统及方法 |
| 申请号 | CN200710074454.3 | 申请日期 | 2007-05-15 |
| 法律状态 | 权利终止 | 申报国家 | 中国 |
| 公开/公告日 | 2007-12-12 | 公开/公告号 | CN101087314 |
| 优先权 | 暂无 | 优先权号 | 暂无 |
| 主分类号 | H04L29/10 | IPC分类号 | H;0;4;L;2;9;/;1;0查看分类表>
|
| 申请人 | 华为技术有限公司 | 申请人地址 | 广东省深圳市龙岗区坂田华为总部办公楼
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
| 权利人 | 华为技术有限公司 | 当前权利人 | 华为技术有限公司 |
| 发明人 | 罗汉军;涂伯颜;施勇;王允庆 |
| 代理机构 | 深圳中一专利商标事务所 | 代理人 | 张全文 |
摘要
本发明适用于通信技术领域,提供了一种应用程序跨进程使用套接字服务的系统及方法,所述系统包括:套接字接口模块,所述套接字接口模块为分布在不同进程的所述应用程序提供套接字服务;伪套接字模块,所述伪套接字模块与所述应用程序运行于同一进程,当接收到应用程序调用跨进程的套接字接口的请求时,发送请求消息;以及代理模块,所述代理模块与所述套接字接口模块运行于同一进程,当接收所述伪套接字模块发送的请求消息后,向所述套接字接口模块发送调用套接字接口的请求,并将所述套接字接口模块返回的调用结果通过响应消息返回给所述伪套接字模块;所述伪套接字模块接收到所述响应消息后将调用结果返回给所述应用进程。
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所述的应用程序跨进程使用套接字服务的方法,其特征在于,所述负载分配策略为轮流分配。
技术领域\n本发明属于通信技术领域,尤其涉及一种应用程序跨进程使用套接字服务的系统及方法。\n背景技术\n套接字(socket)是网络编程的应用程序接口(application programminginterface,API)。应用层通过传输层进行数据通信时,会遇到同时为多个应用程序进程提供并发服务的问题,多个连接或多个应用程序进程可能需要通过同一个传输控制协议(Transfer Control Protocol,TCP)端口传输数据。为了区别不同的连接和应用程序进程,许多计算机操作系统为应用程序与TCP/IP(Internet Protocol)的交互提供了socket接口。如图1所示,应用层可以和传输层通过Socket接口区分来自不同网络连接或应用程序进程的通信,实现数据传输的并发服务。\n目前,多进程路由器架构逐步变成主流,多进程环境中跨进程使用socket服务的需求也越来越强烈,但目前的技术仍是只能基于操作系统的socket,没有明确的方法来实现跨进程提供socket服务。\n发明内容\n本发明实施例的目的在于提供一种跨进程使用socket服务的系统,实现跨进程使用socket服务。\n本发明实施例是这样实现的,一种跨进程使用socket服务的系统,所述系统包括:\n套接字接口模块,所述套接字接口模块为分布在不同进程的所述应用程序提供套接字服务,所述套接字接口模块的接口函数包括同步函数和异步函数;\n伪套接字模块,所述伪套接字模块与所述应用程序运行于同一进程,当接收到应用程序调用跨进程的套接字接口的请求时,发送请求消息;以及\n代理模块,所述代理模块与所述套接字接口模块运行于同一进程,当接收所述伪套接字模块发送的请求消息后,向所述套接字接口模块发送调用套接字接口的请求,并将所述套接字接口模块返回的调用结果通过响应消息返回给所述伪套接字模块;\n所述伪套接字模块接收到所述响应消息后将调用结果返回给所述应用进程。\n本发明实施例的另一目的在于提供跨进程使用socket服务的方法。\n一种应用程序跨进程使用套接字服务的方法,所述方法包括:\n应用程序向伪套接字模块发送调用套接字接口的请求;\n伪套接字模块根据所述应用程序的调用发送请求消息;\n代理模块根据接收到的所述伪套接字模块发送的请求消息,向套接字接口模块发送调用套接字接口的请求,并将所述套接字接口模块返回的调用结果通过响应消息返回给所述伪套接字模块,所述套接字接口模块的接口函数包括同步函数和异步函数;\n所述伪套接字模块接收到所述响应消息后将调用结果返回给所述应用进程。\n本发明实施例通过将套接字接口延伸到应用程序所在的进程中,实现了跨进程环境下应用程序仍可以继续使用套接字服务,而且应用进程与套接字接口既可以在同一块的单板上也可以在两块单板上。\n附图说明\n图1是现有技术提供的socket服务架构图;\n图2是本发明实施例提供的应用程序跨进程使用socket服务的系统200的结构图;\n图3是本发明实施例提供的系统200实现同步函数调用的流程图;\n图4是本发明实施例提供的系统200实现异步函数调用的流程图;\n图5~6是本发明实施例提供的实现socket stub并行线程的示意图;\n具体实施方式\n为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。\n图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本身不改变。\n在本发明一实施例中,socket lib203中包括一进程间通信(Inter-ProcessConnection,IPC)消息转换单元2031,用于将所述应用程序调用套接字接口的调用请求转换为IPC消息后发送到socket stub204,而socket stub204中也包括一IPC消息转换单元2031,用于将socket接口模块202返回的函数调用结果转换为IPC消息后返回给socket lib203。\nSocket接口模块202的接口函数分为两类:同步函数和异步函数。同步函数在完成指定的任务之前,不允许程序调用另一个函数,在Windows下还会阻塞本线程消息的发送,例如:socket、connect、bind、accept函数等。异步函数在操作启动之后,如果可以立即得到结果就返回结果,否则不等任务完成,就返回表示结果需要等待的错误信息,例如:数据接收、发送、事件等。\n为延伸socket接口模块202的socket接口,本发明实施例提供的应用程序跨进程使用socket服务的系统200实现同步函数调用的具体流程如图3所示,详述如下:\n在步骤1中,应用程序201调用socket lib203提供的socket函数;\n在步骤2中,socket lib203将该调用转换成IPC消息发送给socket stub204,利用信号量阻塞住应用程序201;\n在本发明一实施例中,socket lib203中还包括一抑制单元,用于使用信号量阻塞应用程序201。\n在步骤3中,socket stub204分析来自socket lib203的IPC请求,发现是socket()调用,向socket接口模块202调用协议栈真正的socket函数;\n当socket stub204接收到IPC消息,根据消息中包含的消息类型、进程id(identity)和socket id,调用socket接口模块202中相应的socket函数。\n在步骤4中,socket函数调用返回,将结果返回给socket stub204;\n在步骤5中,socket stub204将结果转换成IPC消息发送给socket lib203;\n在步骤6中,socket lib203分析该消息,根据socket id解除相应应用程序201的阻塞,并将结果返回给相应的调用进程。\n当存在多个应用程序调用进程时,为了保证socket lib203能将来自socketstub204的响应能正确地提交给合适的调用进程,socket lib203会保存应用程序201的信息,例如进程id、线程id、socket id、protocol等。同样地,为了保证socket stub204能将结果返回给合适的调用者,它除了和socket lib203维护同样的信息外,还要维护额外的信息,例如message queue id等。\n为了实现异步调用,避免应用程序201阻塞在某些socket应用程序接口调用上,socket接口模块202中包括一个异步事件通知接口,向应用程序201通知发事件,例如:连接成功、可以读数据、TCP服务器与TCP客户端的连接存在等,使得应用程序201可以发送数据、读数据、接受外来TCP连接等。以socket接口模块202通知应用程序201读取数据为例,参考图4,详述如下:\n在步骤1中,socket接口模块202通过IPC向应用程序201发送异步事件通知,指示有数据可用;\n在步骤2中,应用程序201收到socket接口模块202发来的通知后,调用read()函数;\n在步骤3中,socket lib203发送IPC请求给socket stub204;\n在步骤4中,socket stub204分析来自socket lib203的请求并调用socket接口模块202中真正的read()函数;\n在步骤5中,真正的read()函数将结果返回socket stub204;\n在步骤6中,socket stub204将结果转换成IPC响应消息发送给socketlib203;\n在步骤7中,socket lib203分析来自socket stub204的消息并将结果返回给合适的调用进程。\n在本发明一实施例中,如图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先建立联系就能实现并行,具体实现流程如下:\n1.socket lib203向公共消息单元2041申请服务;\n2.公共消息单元2041按照负载分配策略分配一个socket stub线程,将该线程的IPC消息句柄(handle)返回给socket lib203;\n假设外部有十个应用进程,那么可以每五个启动一个stub线程。具体的分配策略可以是轮流分配,例如:第一个属于stubl,第二个属于stub2,第三个属于stubl......\n3.socket lib203根据IPC handle与对应的socket stub线程通讯。\n有关socket lib203与socket stub204之间的后续通讯过程参考图3和图4及其对应的文字说明,不再赘述。\n本发明实施例通过使用stub-lib机制将socket接口延伸到应用程序所在的进程中,实现了跨进程环境下应用程序仍可以继续使用socket服务,将协议栈中的socket服务延伸到所有应用进程,应用进程与socket接口既可以在同一个单板上也可以跨单板。此外,由于socket服务本身和应用程序分布在不同的进程中,这种客观上的分离使得多进程环境下,当单进程需要进行升级时,TCP连接能够继续维持不断开。同样,当socket接口和应用程序部署在不同的单板上时,例如:socket接口部署在接口板上,而应用程序部署在主控板,此时主控板可以倒换,而接口板上的TCP连接继续维持,所以本发明实施例可作为一种基于TCP连接的应用程序的高可用性解决方案。\n以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
法律信息
- 2016-06-29
未缴年费专利权终止
IPC(主分类): H04L 29/10
专利号: ZL 200710074454.3
申请日: 2007.05.15
授权公告日: 2010.11.10
- 2010-11-10
- 2008-02-06
- 2007-12-12
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有引用任何外部专利数据! |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |