一种模块间通信的方法、装置及计算设备与流程

文档序号:11386306阅读:198来源:国知局
一种模块间通信的方法、装置及计算设备与流程

本发明实施例涉及数字通信技术领域,尤其涉及一种模块间通信的方法、装置及计算设备。



背景技术:

操作系统中及基于操作系统开发的应用软件中的软件模块之间,需要进行交互式通信收发通信消息包,以实现数据交换。软件模块与软件模块之间的数据交互通信,即模块间通信包括:进程内通信和进程间通信;其中,进程间通信包括:同一计算设备内的进程间通信,不同计算设备间的进程间通信。

统一的通信接口才会使通信透明简单,从而在软件开发阶段全力于业务逻辑的实现,因此,在大多数情况下,模块间通信的双方都是通过绑定的ip和端口进行身份识别,并收发通信消息包。

然而,发明人在实现本发明实施例中的技术方案的过程中发现,现有模块间通信的方法至少存在如下技术问题:

在实际应用中,现有基于ip和端口的模块间通信方法无法区分模块间通信类型,进而不能针对不同的模块间通信类型采用能提高通信效率和带宽利用率的模块间通信方式进行模块间通信。



技术实现要素:

有鉴于此,本发明实施例的目的在于提供一种模块间通信的方法、装置及计算设备,用以解决现有技术中基于ip和端口的模块间通信方法无法区分模块间通信类型的缺陷,通过采用进程名、模块名、逻辑机器名及进程主备状态对模块通信双方的软件模块及它们所发送的通信消息包中的目的地址进行标识,实现对模块间通信类型进行区分,进而针对不同的模块间通信类型采用对应的模块间通信方式发送通信消息包,提高模块间通信的通信效率和带宽利用率。

为了实现上述目的,本发明实施例中采用的技术方案如下:

第一方面,本发明实施例中提供一种模块间通信的方法,应用于第一计算设备,所述第一计算设备及与所述第一计算设备通信的至少一个第二计算设备的软件模块采用进程名、模块名、逻辑机器名及进程主备状态进行标识;其中,所述进程名为基于所处理的业务预定义的进程名称,所述模块名为预定义的软件模块名称,所述逻辑机器名为预定义的计算设备的逻辑硬件名称,所述进程主备状态为由进程主备管理节点确定的主进程状态和备进程状态;所述方法包括:

在模块间通信的软件模块发送方获得通信消息包后,解析获得所述通信消息包中的目的地址;其中,所述目的地址中具有进程名、模块名、逻辑机器名及进程主备状态标记;

基于所述目的地址确定与进程相关的模块间通信类型;

采用与所述模块间通信类型对应的模块间通信方式,将所述通信消息包发送给所述模块间通信的软件模块接收方。

可能的实施方式中,如果基于所述目的地址确定与进程相关的模块间通信类型为进程内通信,所述采用与所述模块间通信类型对应的模块间通信方式,将所述通信消息包发送给所述模块间通信的软件模块接收方的步骤,具体为:

采用与进程内通信对应的内部消息队列通信方式,将所述通信消息包发送给所述模块间通信的所述软件模块接收方;其中,内部消息队列通信方式包括普通消息队列通信方式和内存消息队列通信方式。

可能的实施方式中,如果内部消息队列通信方式为所述内存消息队列通信方式,所述采用与进程内通信对应的内部消息队列通信方式,将所述通信消息包发送给所述模块间通信的所述软件模块接收方的步骤,具体为:

将所述通信消息包内存指针写入内存消息队列,以使所述模块间通信的所述软件模块接收方从所述内存消息队列中获取所述通信消息包的内存指针,基于所述通信消息包的内存指针获取所述通信消息包的内容。

可能的实施方式中,如果基于所述目的地址确定与进程相关的模块间通信类型为同一计算设备内的进程间通信,所述采用与所述模块间通信类型对应的模块间通信方式,将所述通信消息包发送给所述模块间通信的所述软件模块接收方的步骤,具体为:

采用与同一计算设备内的进程间通信对应的系统消息队列通信方式,将所述通信消息包发送给所述模块间通信的所述软件模块接收方;其中,所述系统消息队列为进程对外消息接口中包括的系统消息队列。

可能的实施方式中,如果基于所述目的地址确定的模块间通信类型为不同计算设备间的进程间通信,所述采用与所述模块间通信类型对应的模块间通信方式,将所述通信消息包发送给所述模块间通信的所述软件模块接收方的步骤,具体为:

采用与不同计算设备间的进程间通信对应的ip和端口号通信方式,将所述通信消息包发送给所述模块间通信的所述软件模块接收方;其中,所述ip和端口号为基于所述进程名及所述进程名对应的进程所拥有的端口资源而得到的进程对外消息接口中包括的ip和端口号。

可能的实施方式中,所述方法还包括:

在所述模块间通信的所述软件模块接收方收到所述通信消息包后,解析收到的所述通信消息包中的所述目的地址;

如果能解析到所述目的地址,基于所述目的地址派发所述通信消息包;

如果不能解析到所述目的地址,将所述通信消息包作为异常消息处理。

可能的实施方式中,在模块间通信的软件模块发送方获得通信消息包之前,所述方法还包括:

在每一个进程内确定一通信收发模块;

基于每一个进程的所述通信收发模块的模块注册接口,将每一个进程内的所述软件模块基于模块名注册到所述通信收发模块中并创建所述软件模块对应的消息队列;

在所有进程完成进程内的软件模块注册后,获得一用于软件模块间进行通信地址转换的地址映射表;其中,所述地址映射表为进程名、模块名、逻辑机器名及进程主备状态,消息队列,ip和端口的映射表;所述消息队列包括内部消息队列和系统消息队列。

第二方面,本发明实施例中提供一种模块间通信的装置,应用于第一计算设备,所述第一计算设备及与所述第一计算设备通信的至少一个第二计算设备的软件模块采用进程名、模块名、逻辑机器名及进程主备状态进行标识;其中,所述进程名为基于所处理的业务预定义的进程名称,所述模块名为预定义的软件模块名称,所述逻辑机器名为预定义的计算设备的逻辑硬件名称,所述进程主备状态为由进程主备管理节点确定的主进程状态和备进程状态;所述装置包括:

通信消息包解析单元,用于在模块间通信的软件模块发送方获得通信消息包后,解析获得所述通信消息包中的目的地址;其中,所述目的地址中具有进程名、模块名、逻辑机器名及进程主备状态标记;

通信类型确定单元,用于基于所述目的地址确定与进程相关的模块间通信类型;

通信消息包发送单元,用于采用与所述模块间通信类型对应的模块间通信方式,将所述通信消息包发送给所述模块间通信的软件模块接收方。

可能的实施方式中,如果基于所述目的地址确定与进程相关的模块间通信类型为进程内通信,所述通信消息包发送单元,具体用于:

采用与进程内通信对应的内部消息队列通信方式,将所述通信消息包发送给所述模块间通信的所述软件模块接收方;其中,内部消息队列通信方式包括普通消息队列通信方式和内存消息队列通信方式。

可能的实施方式中,如果内部消息队列通信方式为所述内存消息队列通信方式,所述通信消息包发送单元,具体用于:

将所述通信消息包内存指针写入内存消息队列,以使所述模块间通信的所述软件模块接收方从所述内存消息队列中获取所述通信消息包的内存指针,基于所述通信消息包的内存指针获取所述通信消息包的内容。

可能的实施方式中,如果基于所述目的地址确定与进程相关的模块间通信类型为同一计算设备内的进程间通信,所述通信消息包发送单元,具体用于:

采用与同一计算设备内的进程间通信对应的系统消息队列通信方式,将所述通信消息包发送给所述模块间通信的所述软件模块接收方;其中,所述系统消息队列为进程对外消息接口中包括的系统消息队列。

可能的实施方式中,如果基于所述目的地址确定与进程相关的模块间通信类型为不同计算设备间的进程间通信,所述通信消息包发送单元,具体用于:

采用与不同计算设备间的进程间通信对应的ip和端口号通信方式,将所述通信消息包发送给所述模块间通信的所述软件模块接收方;其中,所述ip和端口号为基于所述进程名及所述进程名对应的进程所拥有的端口资源而得到的进程对外消息接口中包括的ip和端口号。

可能的实施方式中,所述装置还包括:

通信消息包接收处理单元,用于在所述模块间通信的所述软件模块接收方收到所述通信消息包后,解析收到的所述通信消息包中的所述目的地址;如果能解析到所述目的地址,基于所述目的地址派发所述通信消息包;如果不能解析到所述目的地址,将所述通信消息包作为异常消息处理。

可能的实施方式中,所述装置还包括:

通信收发模块确定单元,用于在模块间通信的软件模块发送方获得通信消息包之前,在每一个进程内确定一通信收发模块;基于每一个进程的所述通信收发模块的模块注册接口,将每一个进程内的所述软件模块基于模块名注册到所述通信收发模块中并创建所述软件模块对应的消息队列;在所有进程完成进程内的软件模块注册后,获得一用于软件模块间进行通信地址转换的地址映射表;其中,所述地址映射表为进程名、模块名、逻辑机器名及进程主备状态,消息队列,ip和端口的映射表;所述消息队列包括内部消息队列和系统消息队列。

第三方面,本发明实施例中提供一种计算设备,包括:

至少一个处理器;以及,

与所述至少一个处理器通信连接的存储器;其中,

所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行前述的模块间通信的方法。

基于上述技术方案,本发明实施例中的模块间通信的方法、装置及计算设备,通过进程名、模块名、逻辑机器名、进程主备状态对计算设备所使用的软件模块进行标识,实现软件模块通信接口在基于进程名和进程拥有的端口资源得到的ip和端口的基础上进一步统一,ip和端口动态绑定进程名,不需要因ip和端口发生改变对软件模块做出相应的改变策略;如此,一方面,可通过软件模块的通信接口生成的通信消息包中的目的地址的进程名、模块名、逻辑机器名及进程主备状态标记,区分软件模块与软件模块之间与进程相关的模块间通信类型,进而针对不同的模块间通信类型采用更能提高模块间通信的通信效率和带宽利用率的模块间通信方式发送通信消息包,实现计算设备内部软件模块之间、计算设备与计算设备的软件模块之间自适应通信,去除不必要的系统带宽占用,在计算设备与计算设备之间通信时,能有效降低计算设备的对外带宽占用和有效降低网卡负载,提高模块间通信的通信效率和带宽利用率;另一方面,由于实现软件通信接口统一,让模块间通信透明简单,使得软件模块化思想更明了,降低软件开发的难度和复杂度,以便在软件开发阶段全力于业务逻辑的实现,提高软件开发速度。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1示出了本发明实施例中提供的一种模块间通信的方法的过程示意图;

图2示出了本发明实施例中在每一个进程内创建能够用于收发进程内通信和进程间通信通信消息包的通信收发模块的过程示意图;

图3示出了本发明实施例中提供的一种模块间通信的装置的结构示意图;

图4示出了本发明实施例中提供的一种计算设备的结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

为了便于清楚、完整地理解本发明实施例的技术方案,下面对本发明实施例中所涉及的术语进行说明。

术语“消息”(message),是指同一计算设备的进程内和/或进程间传输的数据,或不同计算设备的进程间传输的数据。

术语“消息队列”(messagequeue),即消息链表,是消息的传输过程中用于保存消息的容器,消息发送方按照一定的规则向消息队列中添加所要发送的新消息,消息接收方从消息队列中读取消息,消息队列充当中间人,将消息从它的发送方中继到它的接收方,通过消息队列传递消息,是为消息传递提供路由并保证消息的成功传递。

术语“进程”(process),是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,每一个进程都有它自己的地址空间。

现有基于ip和端口的模块间通信方法无法区分模块间通信类型,进而不能针对不同的模块间通信类型采用能提高通信效率和带宽利用率的模块间通信方式进行模块间通信。

发明人在实现本发明实施例中的技术方案的过程中发现,之所以基于ip和端口的模块间通信方法无法区分模块间通信类型,并非由于模块间通信类型无法区分,真实原因是,在模块间通信过程中,用于模块间通信的ip和端口会发生改变,无法基于ip和端口对模块间通信的软件模块双方进行有效定位。

发明人在研究中还发现,模块间通信涉及的因素包括进程、进程主备状态、进程中的软件模块、及进程通信所使用的硬件相关信息。如果能将它们关联起来,就能实现模块间通信的通信接口统一,使模块间通信透明简单,也就能对模块间通信的软件模块双方进行有效定位,从而区分模块间通信类型。

发明人基于上述认识,提供一种模块间通信的方法、装置及计算设备。

图1示出了本发明实施例中提供的一种模块间通信的方法的过程示意图;所述方法,应用于第一计算设备,所述第一计算设备及与所述第一计算设备通信的至少一个第二计算设备的软件模块采用进程名、模块名、逻辑机器名及进程主备状态进行标识;其中,所述进程名为基于所处理的业务预定义的进程名称,所述模块名为预定义的软件模块名称,所述逻辑机器名为预定义的计算设备的逻辑硬件名称,所述进程主备状态为由进程主备管理节点确定的主进程状态和备进程状态。

其中,所述第一计算设备和所述第二计算设备,具体可以不限于是云平台、服务器、客户端、工作站、个人计算机(pc)、笔记本电脑、工控机、嵌入式设备、智能终端设备、网络交换设备、网络安全设备、网络终端设备等涉及软件的计算设备;所述计算设备的软件模块,具体可以是不限于系统软件、应用软件、中间件的软件模块。

所述进程名(processidentification),为基于所处理的业务预定义的进程名称,具体可以用pid表示;与进程相关的所述进程主备状态,为由进程主备管理节点确定的主进程状态和备进程状态,具体可以用hastate表示;在预定义进程名时,处理业务相同的进程,采用相同的进程名,例如,进程主备管理节点确定的状态通常不一样的主进程和备进程,所处理的业务相同,因此拥有相同的进程名;同时,还要确保进程名为全局唯一标识,具体可以通过全局唯一id生成器生成。

所述模块名(moudleidentification),为预定义的软件模块名称,具体可以用moudleid表示;在预定义软件模块名称时,同一进程中的软件模块名称务必确保唯一,不同进程的软件模块名称可以相同。

所述逻辑机器名(slotidentification),为预定义的计算设备的逻辑硬件名称,具体可以用slotid表示;所述逻辑机器名,具体可以是板卡槽位号等。

在模块间通信前,基于模块注册,将每一个进程内的软件模块注册到进程中并创建所述软件模块对应的消息队列;在所有进程完成进程内的软件模块注册后,获得一用于软件模块间进行通信地址转换的地址映射表。

在模块间通信前,第一计算设备和第二计算设备进行进程注册,进程注册的具体过程可以是,在进程1初始化时,进程1根据硬件环境初始化好自己的硬件信息,例如逻辑机器名(具体可以包括机框号、板卡槽位号、芯片号等),基于进程名和进程拥有的端口资源,得到进程1对外消息接口中的端口号,在此基础上获得板卡对外的ip,从而创建进程1对外的通信收发接口以及用于获取同一计算设备内其他进程发过来的系统消息的系统消息队列。进程1将自己的硬件信息,例如逻辑机器名(具体可以包括机框号、板卡槽位号、芯片号等),及其他专属信息,例如进程主备状态、系统消息队列号、收发接口的ip和端口号等,通过组播或广播的方式通知其他进程,例如进程2、进程3等,实现进程间彼此发现,从而得到用于进程通信的地址映射表。

现参照图1所示,本发明实施例中模块间通信的具体过程如下:

s110,在模块间通信的软件模块发送方获得通信消息包后,解析获得所述通信消息包中的目的地址;其中,所述目的地址中具有进程名、模块名、逻辑机器名及进程主备状态标记;

s120,基于所述目的地址确定与进程相关的模块间通信类型;

其中,步骤s120中确定的与进程相关的模块间通信类型,具体可以包括进程内通信、同一计算设备内的进程间通信、不同计算设备间的进程间通信。

具体实施过程可以是,基于目的地址中的模块名和逻辑机器名判断所述通信消息包发往的是不同计算设备的软件模块,还是同一计算设备内的软件模块,如果是不同计算设备的软件模块,则与进程相关的模块间通信类型是不同计算设备间的进程间通信,如果是同一计算设备内的软件模块,则再基于进程名和进程主备状态判断是同一计算设备内的进程间通信还是进程内通信。

s130,采用与所述模块间通信类型对应的模块间通信方式,将所述通信消息包发送给所述模块间通信的软件模块接收方。

与步骤s120中相对应,步骤s130中采用与所述模块间通信类型对应的模块间通信方式,将所述通信消息包发送给所述模块间通信的软件模块接收方,至少可以通过以下三种可能的实施方式实现:

第一种可能的实施方式为:

如果基于所述目的地址确定与进程相关的模块间通信类型为进程内通信,所述采用与所述模块间通信类型对应的模块间通信方式,将所述通信消息包发送给所述模块间通信的软件模块接收方的步骤,具体为:

采用与进程内通信对应的内部消息队列通信方式,将所述通信消息包发送给所述模块间通信的所述软件模块接收方;其中,内部消息队列通信方式包括普通消息队列通信方式和内存消息队列通信方式。其中:

如果内部消息队列通信方式为所述内存消息队列通信方式,所述采用与进程内通信对应的内部消息队列通信方式,将所述通信消息包发送给所述模块间通信的所述软件模块接收方的步骤,具体为:

将所述通信消息包内存指针写入内存消息队列,以使所述模块间通信的所述软件模块接收方从所述内存消息队列中获取所述通信消息包的内存指针,基于所述通信消息包的内存指针获取所述通信消息包的内容。

如果内部消息队列通信方式为普通消息队列通信方式,所述采用与进程内通信对应的内部消息队列通信方式,将所述通信消息包发送给所述模块间通信的所述软件模块接收方的步骤,具体为:

将所述通信消息包写入普通消息队列,以使所述模块间通信的所述软件模块接收方从所述普通消息队列中获取所述通信消息包的内容拷贝。

在本发明实施例中,所述内部消息队列,为用于同一计算设备的进程内的软件模块之间进行模块间通信的消息队列。所述内存消息队列,为基于消息所存储内存的内存指针生成的消息链表。

在第一种可能的实施方式中,如果采用普通消息队列通信方式进行进程内通信,进程内通信完成后系统回收所述通信消息包的内容所占用的内存,如果采用内存消息队列通信方式进行进程内通信,可避免采用内容拷贝方式进行通信消息包交互,也就没有通信消息包被过多地拷贝造成内存泄露的问题。此外,基于内部消息队列通信方式进行进程内通信,不仅能提供路由确保通信消息包送达,还能为通信消息包的传递提供冗余,以及能提供异步处理机制有效削减进程内通信的流量峰值,提高进程内通信的效率和性能。

第二种可能的实施方式为:

如果基于所述目的地址确定与进程相关的模块间通信类型为同一计算设备内的进程间通信,所述采用与所述模块间通信类型对应的模块间通信方式,将所述通信消息包发送给所述模块间通信的所述软件模块接收方的步骤,具体为:

采用与同一计算设备内的进程间通信对应的系统消息队列通信方式,将所述通信消息包发送给所述模块间通信的所述软件模块接收方;其中,所述系统消息队列为进程对外消息接口中包括的系统消息队列。

在模块间通信类型为同一计算设备内的进程间通信时,也可以采用基于进程名和进程拥有的端口资源而得到的进程对外消息接口中的ip和端口号,进行同一计算设备内的进程间通信。

采用基于计算设备操作系统内核的系统消息队列进行同一计算设备内的进程间通信,一方面,不仅能通过异步处理机制有效削减进程内通信的流量峰值,提高进程间通信的效率和性能,还能为通信消息包传递提供冗余及提供路由确保通信消息包送达,以及能有效降低两个进程间的耦合度;另一方面,使同一计算设备内的进程间通信不占用计算设备的网卡负载。

在本发明实施例中,所述系统消息队列,为基于操作系统内核的消息队列。

第三种可能的实施方式为:

如果基于所述目的地址确定的模块间通信类型为不同计算设备间的进程间通信,所述采用与所述模块间通信类型对应的模块间通信方式,将所述通信消息包发送给所述模块间通信的所述软件模块接收方的步骤,具体为:

采用与不同计算设备间的进程间通信对应的ip和端口号通信方式,将所述通信消息包发送给所述模块间通信的所述软件模块接收方;其中,所述ip和端口号为基于所述进程名及所述进程名对应的进程所拥有的端口资源而得到的进程对外消息接口中包括的ip和端口号。

基于所述进程名及所述进程名对应的进程所拥有的端口资源而得到的进程对外消息接口中包括的ip和端口号,与进程名之间为动态绑定关系,在ip和端口号发生改变时,不需要对软件模块做出相应的改变策略,即用于不同计算设备间的进程间通信的通信接口可以是统一的通信接口,从而使不同计算设备间的进程间通信透明简单。

至少基于通信消息包在进程内和/或进程间实现有效传送考虑,进一步,所述方法还包括:

在所述模块间通信的所述软件模块接收方收到所述通信消息包后,解析收到的所述通信消息包中的所述目的地址;

如果能解析到所述目的地址,基于所述目的地址派发所述通信消息包;

如果不能解析到所述目的地址,将所述通信消息包作为异常消息处理。

具体实施过程可以是,模块间通信的所述软件模块接收方,在获得所述软件模块发送方发来的所述通信消息包后,解析所述通信消息包,基于解析到的所述目的地址派发所述通信消息包,如果解析不到所述目的地址将所述通信消息包作为异常消息处理,在进行异常消息处理时可以加入逻辑机器名、进程主备状态进行综合判断。

至少基于简化进程内通信和/或进程间通信的通信接口考虑,进一步,现参照图2所示,在模块间通信的软件模块发送方获得通信消息包之前,所述方法还包括:

s010,在每一个进程内确定一通信收发模块;

s020,基于每一个进程的所述通信收发模块的模块注册接口,将每一个进程内的所述软件模块基于模块名注册到所述通信收发模块中并创建所述软件模块对应的消息队列;

s030,在所有进程完成进程内的软件模块注册后,获得一用于软件模块间进行通信地址转换的地址映射表;其中,所述地址映射表为进程名、模块名、逻辑机器名及进程主备状态,消息队列,ip和端口的映射表;所述消息队列包括内部消息队列和系统消息队列。

具体实施过程可以是:

计算设备的操作系统或者应用软件系统,在每一个进程内部确定一个通信收发模块,所述通信收发模块用于收发通信消息包,其中,所述通信消息包,包括进程内通信的通信消息包和进程间通信通信消息包。所述通信收发模块,具体可以包括通信接收模块和通信发送模块,其中,通信接收模块和通信发送模块可以是一个模块,也可以是两个分开设计的模块。

所述通信收发模块具有模块注册接口,第一计算设备和/或第二计算设备的操作系统或者应用软件系统,通过调用所述通信收发模块的所述模块注册接口,将每一个进程内的软件模块基于模块名注册到所述通信收发模块中,所述软件模块注册到所述通信收发模块的过程中,会创建所述软件模块对应的消息队列,该消息队列具体可以采用双队列的方式实现,也可以采用单队列方式的实现,其中,所述消息队列包括内部消息队列和系统消息队列。在所有进程完成进程内的软件模块注册后,获得一用于软件模块间进行通信地址转换的地址映射表;由于所述第一计算设备及与所述第一计算设备通信的至少一个第二计算设备的软件模块采用进程名、模块名、逻辑机器名及进程主备状态进行标识,并绑定ip和端口,因此,所述地址映射表为进程名、模块名、逻辑机器名及进程主备状态,消息队列,ip和端口的映射表。

由此可见,本发明实施例中可基于每一个进程内确定的通信收发模块、与所述通信收发模块对应的地址映射表收发进程内通信消息包和进程间通信消息包,简化模块间通信的通信接口,提高通信效率和性能。

本发明实施例中提供的模块间通信的方法,通过进程名、模块名、逻辑机器名、进程主备状态对计算设备所使用的软件模块进行标识,实现软件模块通信接口在基于进程名和进程拥有的端口资源得到的ip和端口的基础上进一步统一,ip和端口动态绑定进程名,不需要因ip和端口发生改变对软件模块做出相应的改变策略;如此,一方面,可通过软件模块的通信接口生成的通信消息包中的目的地址的进程名、模块名、逻辑机器名及进程主备状态标记,区分软件模块与软件模块之间与进程相关的模块间通信类型,进而针对不同的模块间通信类型采用更能提高模块间通信的通信效率和带宽利用率的模块间通信方式发送通信消息包,实现计算设备内部软件模块之间、计算设备与计算设备的软件模块之间自适应通信,去除不必要的系统带宽占用,在计算设备与计算设备之间通信时,能有效降低计算设备的对外带宽占用和有效降低网卡负载,提高模块间通信的通信效率和带宽利用率;另一方面,由于实现软件通信接口统一,让模块间通信透明简单,使得软件模块化思想更明了,降低软件开发的难度和复杂度,以便在软件开发阶段全力于业务逻辑的实现,提高软件开发速度。

前述本发明模块间通信的方法实施例的任一实施例揭示的过程所对应的步骤,可根据一个或者多个步骤所能实现的功能及具体实施应用环境,基于逻辑功能划分得到与任一实施例揭示的过程所对应的多个功能模块,一个功能模块可以同一个步骤相对应,也可以同两个或者两个以上步骤相对应,各个功能模块可以单独物理存在,两个或者两个以上功能模块可共同物理存在。在执行上,可通过执行与功能模块相对应的指令,实现功能模块所对应的步骤的执行,用于执行与功能模块相对应的指令的执行主体可以是一个,也可以是多个。

在不同的具体实施例中,由于所要实现的功能存在差异,具体实施应用环境也可能会有所不同,因此,得到的与具体实施例揭示的过程所对应的多个功能模块,也会存在差异,在一些具体实施例中,可以将一些功能模块省略,或不执行,在一些具体实施例中,可以将两个或两个以上功能模块集成在一个功能模块中,在一些具体实施例中,可将一个或者一个以上功能模块结合或者集成到另一个系统中。

前述基于逻辑功能划分得到的本发明模块间通信的方法实施例的任一实施例揭示的过程所对应的多个功能模块,可以通过程序代码实现得到相对应的程序,所述程序,可安装于存储器中并包括一个或多个由处理器执行的软件功能模块,处理器执行与程序相对应的指令执行与功能模块相对应的方法步骤。

所述程序的形式,可以是外部或驻留的软件、固件或微码(源代码或目标代码),这时,所述程序可以与数据处理系统连接,被其使用;本发明模块间通信的方法实施例的任一实施例揭示的过程所对应的所述程序,可以以处理器可执行的非易失的程序代码的计算机可读介质来提供,所述计算机可读介质为存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前述本发明模块间通信的方法实施例中的模块间通信的方法。所述计算机可读介质可以是任何适合包含、存储、通信、传播或传输程序的元件,具体可以是电子的、磁性的、光学的、电磁的、红外的或半导体的类型。例如,可移动盘、磁带、卡片、电线、光纤、无线连接、网络、广播波、可以在其中预加载程序的固定盘等等。

前述基于逻辑功能划分得到的本发明模块间通信的方法实施例的任一实施例揭示的过程所对应的多个功能模块,也可以通过逻辑电路来实现,相应地,本发明模块间通信的方法实施例的任一实施例揭示的过程,利用一个硬件结构(例如,集成在半导体材料的芯片中),或者适当编程的或以其他方式配置的软件与硬件组合来实现。

不论通过哪一种实现方式来实现本发明模块间通信的方法实施例的任一实施例揭示的过程所对应的步骤,均可得到相对应的本发明模块间通信的装置实施例和/或本发明计算设备实施例。由于它们与本发明模块间通信的方法实施例基于相同的发明构思,它们所要解决的技术问题、实现功能的工作过程、所能获得的技术效果,均与本发明模块间通信的方法实施例相同或者相近。因此,所属领域的技术人员,可参照本发明模块间通信的装置实施例和/或本发明计算设备实施例,理解本发明模块间通信的方法实施例的具体实现形式,同样地,可参照本发明模块间通信的方法实施例中的对方法步骤的具体描述,理解本发明模块间通信的装置实施例中的各功能模块、各功能模块之间的配合关系及本发明模块间通信的装置实施例的工作过程,理解本发明计算设备实施例中的各执行主体执行与功能模块相对应的指令时,所执行与功能模块相对应的方法步骤的过程。

为描述的方便和简洁,在对本发明模块间通信的装置实施例进行说明的过程中,就不再一一具体赘述各功能模块的工作过程,各功能模块之间的配合关系,本发明模块间通信的装置实施例所能解决的技术问题及所能获得的技术效果。同样地,在对本发明计算设备实施例进行说明的过程中,也不再一一具体赘述可参照本发明模块间通信的方法实施例进行理解的内容部分。

基于本发明模块间通信的方法实施例的技术方案,本发明实施例中提供一种模块间通信的装置,所述模块间通信的装置与所述模块间通信的方法属于相同的发明构思。所述模块间通信的装置,可以以本发明模块间通信的方法实施例对应的形式,通过程序代码实现获得对应的程序,并应用于软件,例如系统软件、应用软件、中间件,所述软件具体可应用但不限于云平台、服务器、客户端、工作站、个人计算机(pc)、笔记本电脑、工控机、嵌入式设备、智能终端设备、网络交换设备、网络安全设备、网络终端设备等涉及软件的计算设备。

图3示出了本发明实施例中提供的一种模块间通信的装置的结构示意图。该模块间通信的装置,应用于第一计算设备,所述第一计算设备及与所述第一计算设备通信的至少一个第二计算设备的软件模块采用进程名、模块名、逻辑机器名及进程主备状态进行标识;其中,所述进程名为基于所处理的业务预定义的进程名称,所述模块名为预定义的软件模块名称,所述逻辑机器名为预定义的计算设备的逻辑硬件名称,所述进程主备状态为由进程主备管理节点确定的主进程状态和备进程状态。

现参照图3所示,所述模块间通信的装置100包括:通信消息包解析单元110、通信类型确定单元120、通信消息包发送单元130,而且,在本发明实施例中,通信消息包解析单元110、通信类型确定单元120、通信消息包发送单元130可以是通过硬件处理器(hardwareprocessor)来实现相关功能模块。其中:

通信消息包解析单元110,用于在模块间通信的软件模块发送方获得通信消息包后,解析获得所述通信消息包中的目的地址;其中,所述目的地址中具有进程名、模块名、逻辑机器名及进程主备状态标记;

通信类型确定单元120,用于基于所述目的地址确定与进程相关的模块间通信类型;

通信消息包发送单元130,用于采用与所述模块间通信类型对应的模块间通信方式,将所述通信消息包发送给所述模块间通信的软件模块接收方。

可能的实施方式中,所述装置还包括:

通信消息包接收处理单元140,用于在所述模块间通信的所述软件模块接收方收到所述通信消息包后,解析收到的所述通信消息包中的所述目的地址;如果能解析到所述目的地址,基于所述目的地址派发所述通信消息包;如果不能解析到所述目的地址,将所述通信消息包作为异常消息处理。

可能的实施方式中,所述装置还包括:

通信收发模块确定单元150,用于在模块间通信的软件模块发送方获得通信消息包之前,在每一个进程内确定一通信收发模块;基于每一个进程的所述通信收发模块的模块注册接口,将每一个进程内的所述软件模块基于模块名注册到所述通信收发模块中并创建所述软件模块对应的消息队列;在所有进程完成进程内的软件模块注册后,获得一用于软件模块间进行通信地址转换的地址映射表;其中,所述地址映射表为进程名、模块名、逻辑机器名及进程主备状态,消息队列,ip和端口的映射表;所述消息队列包括内部消息队列和系统消息队列。

可能的实施方式中,如果基于所述目的地址确定与进程相关的模块间通信类型为进程内通信,所述通信消息包发送单元130,具体用于:

采用与进程内通信对应的内部消息队列通信方式,将所述通信消息包发送给所述模块间通信的所述软件模块接收方;其中,内部消息队列通信方式包括普通消息队列通信方式和内存消息队列通信方式。

可能的实施方式中,如果内部消息队列通信方式为所述内存消息队列通信方式,所述通信消息包发送单元130,具体用于:

将所述通信消息包内存指针写入内存消息队列,以使所述模块间通信的所述软件模块接收方从所述内存消息队列中获取所述通信消息包的内存指针,基于所述通信消息包的内存指针获取所述通信消息包的内容。

可能的实施方式中,如果基于所述目的地址确定与进程相关的模块间通信类型为同一计算设备内的进程间通信,所述通信消息包发送单元130,具体用于:

采用与同一计算设备内的进程间通信对应的系统消息队列通信方式,将所述通信消息包发送给所述模块间通信的所述软件模块接收方;其中,所述系统消息队列为进程对外消息接口中包括的系统消息队列。

可能的实施方式中,如果基于所述目的地址确定的模块间通信类型为不同计算设备间的进程间通信,所述通信消息包发送单元130,具体用于:

采用与不同计算设备间的进程间通信对应的ip和端口号通信方式,将所述通信消息包发送给所述模块间通信的所述软件模块接收方;其中,所述ip和端口号为基于所述进程名及所述进程名对应的进程所拥有的端口资源而得到的进程对外消息接口中包括的ip和端口号。

基于本发明模块间通信的方法实施例的技术方案,本发明实施例中提供一种计算设备,所述计算设备与所述模块间通信的方法属于相同的发明构思。所述计算设备,为本发明模块间通信的方法实施例应用获得的相应计算设备,所述计算设备,可以但不限于云平台、服务器、客户端、工作站、个人计算机(pc)、笔记本电脑、工控机、嵌入式设备、智能终端设备、网络交换设备、网络安全设备、网络终端设备等涉及软件的计算设备。

图4示出了本发明实施例中提供的一种计算设备的结构示意图。所述计算设备及能够与其通信连接的其他计算设备的软件模块采用进程名、模块名、逻辑机器名及进程主备状态进行标识;其中,所述进程名为基于所处理的业务预定义的进程名称,所述模块名为预定义的软件模块名称,所述逻辑机器名为预定义的计算设备的逻辑硬件名称,所述进程主备状态为由进程主备管理节点确定的主进程状态和备进程状态。

现参照图4所示,该计算设备200包括:总线230,连接总线230的至少一个处理器210,以及与至少一个处理器210通信连接存储器220。其中,存储器220存储有可被至少一个处理器执行的指令,指令被至少一个处理器210执行,以在执行所述指令时执行如下步骤:

在模块间通信的软件模块发送方获得通信消息包后,解析获得所述通信消息包中的目的地址;其中,所述目的地址中具有进程名、模块名、逻辑机器名及进程主备状态标记;

基于所述目的地址确定与进程相关的模块间通信类型;

采用与所述模块间通信类型对应的模块间通信方式,将所述通信消息包发送给所述模块间通信的软件模块接收方。

至少一个处理器210还用于:

在模块间通信的软件模块发送方获得通信消息包之前,在每一个进程内确定一通信收发模块;基于每一个进程的所述通信收发模块的模块注册接口,将每一个进程内的所述软件模块基于模块名注册到所述通信收发模块中并创建所述软件模块对应的消息队列;在所有进程完成进程内的软件模块注册后,获得一用于软件模块间进行通信地址转换的地址映射表;其中,所述地址映射表为进程名、模块名、逻辑机器名及进程主备状态,消息队列,ip和端口的映射表;所述消息队列包括内部消息队列和系统消息队列。

至少一个处理器210还用于:

在所述模块间通信的所述软件模块接收方收到所述通信消息包后,解析收到的所述通信消息包中的所述目的地址;

如果能解析到所述目的地址,基于所述目的地址派发所述通信消息包;

如果不能解析到所述目的地址,将所述通信消息包作为异常消息处理。

可能的实施方式中,在执行采用与所述模块间通信类型对应的模块间通信方式,将所述通信消息包发送给所述模块间通信的软件模块接收方的步骤时,如果基于所述目的地址确定与进程相关的模块间通信类型为进程内通信,至少一个处理器210具体用于:

采用与进程内通信对应的内部消息队列通信方式,将所述通信消息包发送给所述模块间通信的所述软件模块接收方;其中,内部消息队列通信方式包括普通消息队列通信方式和内存消息队列通信方式。

可能的实施方式中,在执行采用与进程内通信对应的内部消息队列通信方式,将所述通信消息包发送给所述模块间通信的所述软件模块接收方的步骤时,如果内部消息队列通信方式为所述内存消息队列通信方式,至少一个处理器210具体用于:

将所述通信消息包内存指针写入内存消息队列,以使所述模块间通信的所述软件模块接收方从所述内存消息队列中获取所述通信消息包的内存指针,基于所述通信消息包的内存指针获取所述通信消息包的内容。

可能的实施方式中,在执行采用与模块间通信类型对应的模块间通信方式,将所述通信消息包发送给所述模块间通信的所述软件模块接收方的步骤时,如果基于所述目的地址确定与进程相关的模块间通信类型为同一计算设备内的进程间通信,至少一个处理器210具体用于:

采用与同一计算设备内的进程间通信对应的系统消息队列通信方式,将所述通信消息包发送给所述模块间通信的所述软件模块接收方;其中,所述系统消息队列为进程对外消息接口中包括的系统消息队列。

可能的实施方式中,在执行采用与所述模块间通信类型对应的模块间通信方式,将所述通信消息包发送给所述模块间通信的软件模块接收方的步骤时,如果基于所述目的地址确定的模块间通信类型为不同计算设备间的进程间通信,至少一个处理器210具体用于:

采用与不同计算设备间的进程间通信对应的ip和端口号通信方式,将所述通信消息包发送给所述模块间通信的所述软件模块接收方;其中,所述ip和端口号为基于所述进程名及所述进程名对应的进程所拥有的端口资源而得到的进程对外消息接口中包括的ip和端口号。

综上所述,本发明实施例中,通过进程名、模块名、逻辑机器名、进程主备状态对计算设备所使用的软件模块进行标识,实现软件模块通信接口在基于进程名和进程拥有的端口资源得到的ip和端口的基础上进一步统一,ip和端口动态绑定进程名,不需要因ip和端口发生改变对软件模块做出相应的改变策略;如此,一方面,可通过软件模块的通信接口生成的通信消息包中的目的地址的进程名、模块名、逻辑机器名及进程主备状态标记,区分软件模块与软件模块之间与进程相关的模块间通信类型,进而针对不同的模块间通信类型采用更能提高模块间通信的通信效率和带宽利用率的模块间通信方式发送通信消息包,实现计算设备内部软件模块之间、计算设备与计算设备的软件模块之间自适应通信,去除不必要的系统带宽占用,在计算设备与计算设备之间通信时,能有效降低计算设备的对外带宽占用和网卡负载,提高模块间通信的通信效率和带宽利用率;另一方面,由于实现软件通信接口统一,让模块间通信透明简单,使得软件模块化思想更明了,降低软件开发的难度和复杂度,以便在软件开发阶段全力于业务逻辑的实现,提高软件开发速度。

在此基础上,可基于计算设备系统的调度系统消息队列进行同一计算设备内的进程间通信,不会占用计算设备的网卡负载;可基于内部消息队列通信方式,特别是基于内存消息队列通信方式进行进程内通信,使进程内通信变得更合理、更高效,可有效避免通信消息包在内存中被过多地拷贝,进而提高模块间通信的效率和性能。

在此基础上,可基于每一个进程内确定的通信收发模块、与所述通信收发模块对应的地址映射表收发进程内通信消息包和进程间通信消息包,简化模块间通信的通信接口,提高通信效率和性能。

本领域内的技术人员应明白,本发明的实施例可提供为方法、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1