适用于Linux服务器集群的多场景进程间通信方法技术

技术编号:28977915 阅读:17 留言:0更新日期:2021-06-23 09:23
本发明专利技术提供一种适用于Linux服务器集群的多场景进程间通信方法,包括以下步骤:进程通信客户端模块client(A)读取本地套接字socket(A),判断本地套接字socket(A)中是否被传入目的服务器节点ID,如果没有,则表明需要进行本节点进程间通信;如果有,则表明需要进行跨节点进程间通信。本发明专利技术提供的适用于Linux服务器集群的多场景进程间通信方法,使不同场景下的进程通信的操作变得简便快捷,本服务器节点进程通信和跨服务器节点进程通信的函数调用采用相同的函数实现,函数调用十分简单易用。利用仿真路由查询的方式消除服务器集群中增加服务器或修改服务器IP地址对服务器之间进程通信的影响。

【技术实现步骤摘要】
适用于Linux服务器集群的多场景进程间通信方法
本专利技术属于进程间通信
,具体涉及一种适用于Linux服务器集群的多场景进程间通信方法。
技术介绍
现有通用的Linux进程间通信方式主要包括:信号、无名管道、命名管道、消息队列、共享内存、信号量、socket等。其中,socket支持跨服务器节点进程间通信、其余通信方式只能适用于同一台服务器节点进程间通信。在实际的软件开发过程中,如果同时存在同一台服务器节点进程间通信和不同服务器节点进程间通信的业务需求时,需要分别使用不同的进程间通信方式,具有实现过程复杂,资源开销大的问题。
技术实现思路
针对现有技术存在的缺陷,本专利技术提供一种适用于Linux服务器集群的多场景进程间通信方法,可有效解决上述问题。本专利技术采用的技术方案如下:本专利技术提供一种适用于Linux服务器集群的多场景进程间通信方法,包括以下步骤:步骤1,服务器集群包括n个服务器节点NS;每个服务器节点NS均配置messagebus服务模块MB;每个服务器节点NS均运行多个进程;其中,对于任意的服务器节点NS中运行的需要接收消息的进程,称为消息接收进程,所述消息接收进程在进程启动时,均创建进程通信服务端模块server,所述进程通信服务端模块server为运行于所述消息接收进程中的一个线程;所述进程通信服务端模块server创建用于与其他进程通信的本地套接字socket;步骤2,在服务器集群中,当任意的服务器节点NS(A)运行的消息发送进程pro(A),需要与其他的服务器节点NS(B)运行的消息接收进程pro(B)通信时,消息发送进程pro(A)创建进程通信客户端模块client(A),所述进程通信客户端模块client(A)为运行于所述消息发送进程pro(A)中的一个线程;其中,消息接收进程pro(B)创建的进程通信服务端模块表示为进程通信服务端模块server(B),进程通信服务端模块server(B)创建的用于与其他进程通信的本地套接字表示为本地套接字socket(B);然后,进程通信客户端模块client(A)创建用于与本地套接字socket(B)通信的本地套接字socket(A);本地套接字socket(A)的创建方法为:创建初始的本地套接字socket(A),向本地套接字socket(A)传递参数,传递参数的方式为:判断目的服务器节点是否与本服务器节点相同,即:判断服务器节点NS(B)是否与服务器节点NS(A)相同,如果不相同,则表明需要进行跨节点进程间通信,因此,向初始的本地套接字socket(A)传入服务器节点的ID,然后,将messagebus服务模块MBus(A)创建的本地套接字socket(C)的套接字文件路径赋值给本地套接字socket(A);如果相同,则表明需要进行本节点进程间通信,因此,不向初始的本地套接字socket(A)传入服务器节点的ID,然后,将消息接收进程pro(B)的本地套接字socket(B)的套接字文件路径赋值给本地套接字socket(A);步骤3,进程通信客户端模块client(A)读取本地套接字socket(A),判断本地套接字socket(A)中是否被传入目的服务器节点ID,如果没有,则表明需要进行本节点进程间通信,并执行步骤4;如果有,则表明需要进行跨节点进程间通信,并执行步骤5-步骤11;步骤4,消息发送进程pro(A)的本地套接字socket(A),与消息接收进程pro(B)的本地套接字socket(B)建立连接,直接通过套接字方式进行通信,并结束流程;步骤5,消息发送进程pro(A)所在的服务器节点NS(A)创建并运行messagebus服务模块MBus(A),messagebus服务模块MBus(A)为运行于服务器节点NS(A)的一个独立进程;messagebus服务模块MBus(A)创建本地套接字socket(C)和网络套接字socket(D);消息接收进程pro(B)所在的服务器节点NS(B)创建并运行messagebus服务模块MBus(B),messagebus服务模块MBus(B)为运行于服务器节点NS(B)的一个独立进程;messagebus服务模块MBus(B)创建本地套接字socket(F)和网络套接字socket(E);步骤6,进程通信客户端模块client(A)的本地套接字socket(A),与messagebus服务模块MBus(A)的本地套接字socket(C)建立通信连接,进而使进程通信客户端模块client(A)和messagebus服务模块MBus(A)建立通信连接;然后,进程通信客户端模块client(A)向messagebus服务模块MBus(A)发送路由消息;其中,所述路由消息包括消息本体、目的服务器节点ID和消息接收进程pro(B)的本地套接字socket(B)的套接字文件路径;步骤7,messagebus服务模块MBus(A)实时对路由消息进行监听和更新已存储的仿真路由表;其中,所述仿真路由表,用于存储服务器集群中每个服务器节点的服务器节点ID和服务器节点IP地址之间的映射关系;当messagebus服务模块MBus(A)监听到步骤6的路由消息时,messagebus服务模块MBus(A)对路由消息进行解析,得到目的服务器节点ID;然后,查找所述仿真路由表,得到目的服务器节点IP地址;步骤8,messagebus服务模块MBus(A),根据目的服务器节点IP地址,定位到目的服务器节点的messagebus服务模块,即:messagebus服务模块MBus(B);步骤9,messagebus服务模块MBus(A)的网络套接字socket(D),与messagebus服务模块MBus(B)的网络套接字socket(E)建立网络套接字通信连接,并通过网络套接字通信连接,向messagebus服务模块MBus(B)发送路由消息;其中,所述路由消息包括消息本体和消息接收进程pro(B)的本地套接字socket(B)的套接字文件路径;步骤10,messagebus服务模块MBus(B)根据消息接收进程pro(B)的本地套接字socket(B)的套接字文件路径,定位到消息接收进程pro(B);然后,messagebus服务模块MBus(B)的本地套接字socket(F),与消息接收进程pro(B)的本地套接字socket(B)建立通信连接,进而使messagebus服务模块MBus(B)和消息接收进程pro(B)建立通信连接;步骤11,messagebus服务模块MBus(B)将消息本体发送给消息接收进程pro(B),进而实现消息发送进程pro(A)向消息接收进程pro(B)进行跨节点进程间通信。优选的,步骤2中,消息发送进程pro(A)创建进程通信客户端模块client(A),具体为:消息发送进程pro(A)调用进程本文档来自技高网...

【技术保护点】
1.一种适用于Linux服务器集群的多场景进程间通信方法,其特征在于,包括以下步骤:/n步骤1,服务器集群包括n个服务器节点NS;每个服务器节点NS均配置messagebus服务模块MB;每个服务器节点NS均运行多个进程;/n其中,对于任意的服务器节点NS中运行的需要接收消息的进程,称为消息接收进程,所述消息接收进程在进程启动时,均创建进程通信服务端模块server,所述进程通信服务端模块server为运行于所述消息接收进程中的一个线程;/n所述进程通信服务端模块server创建用于与其他进程通信的本地套接字socket;/n步骤2,在服务器集群中,当任意的服务器节点NS(A)运行的消息发送进程pro(A),需要与其他的服务器节点NS(B)运行的消息接收进程pro(B)通信时,消息发送进程pro(A)创建进程通信客户端模块client(A),所述进程通信客户端模块client(A)为运行于所述消息发送进程pro(A)中的一个线程;/n其中,消息接收进程pro(B)创建的进程通信服务端模块表示为进程通信服务端模块server(B),进程通信服务端模块server(B)创建的用于与其他进程通信的本地套接字表示为本地套接字socket(B);/n然后,进程通信客户端模块client(A)创建用于与本地套接字socket(B)通信的本地套接字socket(A);/n本地套接字socket(A)的创建方法为:/n创建初始的本地套接字socket(A),向本地套接字socket(A)传递参数,传递参数的方式为:/n判断目的服务器节点是否与本服务器节点相同,即:判断服务器节点NS(B)是否与服务器节点NS(A)相同,如果不相同,则表明需要进行跨节点进程间通信,因此,向初始的本地套接字socket(A)传入服务器节点的ID,然后,将messagebus服务模块MBus(A)创建的本地套接字socket(C)的套接字文件路径赋值给本地套接字socket(A);/n如果相同,则表明需要进行本节点进程间通信,因此,不向初始的本地套接字socket(A)传入服务器节点的ID,然后,将消息接收进程pro(B)的本地套接字socket(B)的套接字文件路径赋值给本地套接字socket(A);/n步骤3,进程通信客户端模块client(A)读取本地套接字socket(A),判断本地套接字socket(A)中是否被传入目的服务器节点ID,如果没有,则表明需要进行本节点进程间通信,并执行步骤4;如果有,则表明需要进行跨节点进程间通信,并执行步骤5-步骤11;/n步骤4,消息发送进程pro(A)的本地套接字socket(A),与消息接收进程pro(B)的本地套接字socket(B)建立连接,直接通过套接字方式进行通信,并结束流程;/n步骤5,消息发送进程pro(A)所在的服务器节点NS(A)创建并运行messagebus服务模块MBus(A),messagebus服务模块MBus(A)为运行于服务器节点NS(A)的一个独立进程;messagebus服务模块MBus(A)创建本地套接字socket(C)和网络套接字socket(D);/n消息接收进程pro(B)所在的服务器节点NS(B)创建并运行messagebus服务模块MBus(B),messagebus服务模块MBus(B)为运行于服务器节点NS(B)的一个独立进程;messagebus服务模块MBus(B)创建本地套接字socket(F)和网络套接字socket(E);/n步骤6,进程通信客户端模块client(A)的本地套接字socket(A),与messagebus服务模块MBus(A)的本地套接字socket(C)建立通信连接,进而使进程通信客户端模块client(A)和messagebus服务模块MBus(A)建立通信连接;/n然后,进程通信客户端模块client(A)向messagebus服务模块MBus(A)发送路由消息;其中,所述路由消息包括消息本体、目的服务器节点ID和消息接收进程pro(B)的本地套接字socket(B)的套接字文件路径;/n步骤7,messagebus服务模块MBus(A)实时对路由消息进行监听和更新已存储的仿真路由表;其中,所述仿真路由表,用于存储服务器集群中每个服务器节点的服务器节点ID和服务器节点IP地址之间的映射关系;/n当messagebus服务模块MBus(A)监听到步骤6的路由消息时,messagebus服务模块MBus(A)对路由消息进行解析,得到目的服务器节点ID;然后,查找所述仿真路由表,得到目的服务器节点IP地址;/n步骤8,messagebus服务模块MBus(A),根据目的服务器节点IP地址,定位到目的服务器节点的messagebus服务模块,...

【技术特征摘要】
1.一种适用于Linux服务器集群的多场景进程间通信方法,其特征在于,包括以下步骤:
步骤1,服务器集群包括n个服务器节点NS;每个服务器节点NS均配置messagebus服务模块MB;每个服务器节点NS均运行多个进程;
其中,对于任意的服务器节点NS中运行的需要接收消息的进程,称为消息接收进程,所述消息接收进程在进程启动时,均创建进程通信服务端模块server,所述进程通信服务端模块server为运行于所述消息接收进程中的一个线程;
所述进程通信服务端模块server创建用于与其他进程通信的本地套接字socket;
步骤2,在服务器集群中,当任意的服务器节点NS(A)运行的消息发送进程pro(A),需要与其他的服务器节点NS(B)运行的消息接收进程pro(B)通信时,消息发送进程pro(A)创建进程通信客户端模块client(A),所述进程通信客户端模块client(A)为运行于所述消息发送进程pro(A)中的一个线程;
其中,消息接收进程pro(B)创建的进程通信服务端模块表示为进程通信服务端模块server(B),进程通信服务端模块server(B)创建的用于与其他进程通信的本地套接字表示为本地套接字socket(B);
然后,进程通信客户端模块client(A)创建用于与本地套接字socket(B)通信的本地套接字socket(A);
本地套接字socket(A)的创建方法为:
创建初始的本地套接字socket(A),向本地套接字socket(A)传递参数,传递参数的方式为:
判断目的服务器节点是否与本服务器节点相同,即:判断服务器节点NS(B)是否与服务器节点NS(A)相同,如果不相同,则表明需要进行跨节点进程间通信,因此,向初始的本地套接字socket(A)传入服务器节点的ID,然后,将messagebus服务模块MBus(A)创建的本地套接字socket(C)的套接字文件路径赋值给本地套接字socket(A);
如果相同,则表明需要进行本节点进程间通信,因此,不向初始的本地套接字socket(A)传入服务器节点的ID,然后,将消息接收进程pro(B)的本地套接字socket(B)的套接字文件路径赋值给本地套接字socket(A);
步骤3,进程通信客户端模块client(A)读取本地套接字socket(A),判断本地套接字socket(A)中是否被传入目的服务器节点ID,如果没有,则表明需要进行本节点进程间通信,并执行步骤4;如果有,则表明需要进行跨节点进程间通信,并执行步骤5-步骤11;
步骤4,消息发送进程pro(A)的本地套接字socket(A),与消息接收进程pro(B)的本地套接字socket(B)建立连接,直接通过套接字方式进行通信,并结束流程;
步骤5,消息发送进程pro(A)所在的服务器节点NS(A)创建并运行messagebus服务模块MBus(A),messagebus服务模块MBus(A)为运行于服务器节点NS(A)的一个独立进程;messagebus服务模块MBus(A)创建本地套接字socket(C)和网络套接字socket(D);
消息接收进程pro(B)所在的服务器节点NS(B)创建并运行messagebus服务模块MBus(B),messagebus服务模块MBus(B)为运行于服务器节点NS(B)的一个独立进程;messagebus服务模块MBus(B)创建本地套接字socket(F)和网络套接字socket(E);
步骤6,进程通信客户端模块client(A)的本地套接字socket(A),与messagebus服务模块MBus(A)的本地套接字socket(C)建立通信连接,进而使进程通信客户端模块client(A)和messagebus服务模块MBus(A)建立通信连接;
然后,进程通信客户端模块client(A)向messagebus服务模块MBus(A)发送路由消息;其中,所述路由消息包括消息本体、目的服务器节点ID和消息接收进程pro(B)的本地套接字socket(B)的套接字文件路径;
步骤7,messagebus服务模块MBus(A)实时对路由消息进行监听和更新已存储的仿真路由表;其中,所述仿真路由表,用于存储服务器集群中每个服务器节点的服务器节点ID和服务器节点IP地址之间的映射关系;
当messagebus服务模块MBus(A)监听到步骤6的路由消息时,messagebus服务模块MBus(A)对路由消息进行解析,得到目的服务器节点ID;然后,查找所述仿真路由表,得到目的服务器节点IP地址;
步骤8,messagebus服务模块MBus(A),根据目的服务器节点IP地址,定位到目的服务器节点的messagebus服务模块,即:messagebus服务模块MBus(B);
步骤9,messagebus服务模块MBus(A)的网络套接字socket(D),与messagebus服务模块MBus(B)的网络套接字socket(E)建立网络套接字通信连接,并通过网络套接字通信连接,向messagebus服务模块MBus(B)发送路由消息;其中,所述路由消息包括消息本体和消息接收进程pro(B)的本地套接字socket(B)的套接字文件路径;
步骤10,messagebus服务模块MBus(B)根据消息接收进程pro(B)的本地套接字socket(B)的套接字文件路径,定位到消息接收进程pro(B);
然后,messagebus服务模块MBus(B)的本地套接字socket(F),与消息接收进程pro(B)的本地套接字socket(B)建立通信连接,进而使messagebus服务模块MBus(B)和消息接收进程pro(B)建立通信连接;
步骤11,messagebus服务模块MBus(B)将消息本体发送给消息接收进程pro(B),进而实现消息发送进程pro(A)向消息接收进程pro(B)进行跨节点进程间通信。


2.根据权利要求1所述的适用于Linux服务器集群的多场景进程间通信方法,其特征在于,步骤2中,消息发送进程pro(A)创建进程通信客户端模块client(A),具体为:
消息发送进程pro(A)调用进程间通信客户类CxipcClient,对进程间通信客户类CxipcClient进行实例化和初始化操作,得到进程通信客户端模块client(A)。
其中,实例化和初始化方法为:
步骤2.1,进程间通信客户类CxipcClient的构造函数具有两个参数,分别为:destGuid参数和destProName参数;进程间通信客户类CxipcClient具有两个成员变量,分别为m_strDestGuid成员变量和m_strDestServerAddr成员变量;
步骤2.2,如果目的进程,即消息接收进程pro(B)为服务器集群中另一个服务器节点运行的进程,则:
步骤2.2.1,消息发送进程pro(A)向进程间通信客户类CxipcClient的构造函数传递两个参数,具体的,消息发送进程pro(A)向destGuid参数传递目的服务器节点ID,即:服务器节点NS(B)的ID;消息发送进程pro(A)向destProName参数传递目的进程名称,即:消息接收进程pro(B)的名称;
步骤2.2.2,当destGuid参数被传入目的服务器节点ID时,向m_strDestGuid成员变量和m_strDestServerAddr成员变量赋值,赋值方法为:向m_strDestGuid成员变量赋值目的服务器节点ID;向m_strDestServerAddr成员变量赋值本节点messagebus服务模块的套接字文件的文件路径,即:messagebus服务模块MBus(A)创建的本地套接字socket(C)的套接字文件路径,进而构造得到进程通信客户端模块client(A);
步骤2.3,如果消息接收进程pro(B)为服务器节点NS(A)运行的另一个进程,则:
步骤2.3.1,消息发送进程pro(A)向进程间通信客户类CxipcClient的构造函数传递一个参数,具体的,消息发送进程pro(A)向destGuid参数不传递参数;消息发送进程pro(A)向destProName参数传递目的进程名称,即:消息接收进程pro(B)的名称;
步骤2.3.2,当destGuid参数没有被传入参数时,向m_strDestGuid成员变量赋值为空...

【专利技术属性】
技术研发人员:陈帅瞿洪桂
申请(专利权)人:北京中电兴发科技有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1