一种不同进程间的通信方法及通信装置与流程

文档序号:12747863阅读:334来源:国知局
一种不同进程间的通信方法及通信装置与流程

本发明涉及通信技术领域,尤其涉及一种不同进程间的通信方法及通信装置。



背景技术:

在应用系统的运行过程中,往往需要众多的业务应用模块进行协作,而不同的业务应用模块分别部署在不同的进程中,且每一个进程可能运行在不同的中央处理器(Central Processing Unit,CPU)中,从而导致各个业务应用模块之间所采用的字节序不同,进而导致各个业务应用模块无法正确识别接收到的通信消息。

现有技术中,提出了一种不同进程间的通信方法,即第一进程在向第二进程发送通信消息之前,需要将该通信消息的本地字节序转换成标准网络字节序,再将转换后的通信消息发送至第二进程;第二进程接收到通信消息后,也需要将接收到的通信消息的标准网络字节序转换成本地字节序,即在第一进程发送通信消息和第二进程接收通信消息时均需要进行字节序转换,在应用系统内部,这种通信方法不仅设计单一,而且不够灵活,通信效率较低,不利于统一平台支撑不同设备不同产品中的进程间通信。

为了解决上述技术问题,现有技术中,提出了以下两种通信方式:

第一种通信方式:预先设置适配前后的平台字节序类型信息,在获取到需要适配的数据后,基于上述需要适配的数据的数据类型和上述设置的适配前后的平台字节序类型信息,对上述需要适配的数据进行字节序转换,从而获取适配后的数据。这种通信方法需要预先设置适配前后的平台字节序类型信息,不能自动识别字节序类型。

第二种通信方式:根据预设的消息匹配项对第一消息进行消息匹配,此方法依然需要设置适配前后的平台字节序类型信息,不能自动识别字节序类型。

基于上述分析,现有技术中的不同进程间的通信方法存在无法自动识别字节序类型,以及通信效率较低的问题。



技术实现要素:

本发明实施例提供了一种不同进程间的通信方法及通信装置,用以解决现有技术中存在无法自动识别字节序类型,以及通信效率较低的问题。

本发明实施例提供的具体技术方案如下:

一种不同进程间的通信方法,用于运行在不同中央处理器CPU且采用的字节序类型不同的第一进程和第二进程之间进行通信,包括:

所述第二进程接收所述第一进程发送的数据包,并基于所述数据包携带的指定类型数据的字节序,确定所述第一进程采用的第一字节序类型;

所述第二进程按照自身采用的第二字节序类型,对所述数据包进行字节序转换处理,并基于转换后的数据包,按照所述第二字节序类型,生成相应的响应数据包;

所述第二进程按照所述第一字节序类型,对所述响应数据包进行字节序转换处理,并将转换后的响应数据包发送至所述第一进程。

较佳的,所述第二进程接收所述第一进程发送的数据包之前,进一步包括:

所述第二进程指示所述第一进程:按照所述第一字节序类型生成数据包,并直接将所述数据包发送至所述第二进程。

较佳的,第二进程基于所述数据包携带的指定类型数据的字节序,确定所述第一进程采用的第一字节序类型,包括:

所述第二进程获取所述数据包携带的指定类型数据的字节序;

所述第二进程确定所述指定类型数据的低位字节存储在低地址,高位字节存储在高地址时,判定所述第一进程采用的第一字节序类型是小端字节序类型;

所述第二进程确定所述指定类型数据的低位字节存储在高地址,高位字节存储在低地址时,判定所述第一进程采用的第一字节序类型是大端字节序类型。

较佳的,所述第二进程按照自身采用的第二字节序类型,对所述数据包进行字节序转换处理,并基于转换后的数据包,按照所述第二字节序类型,生成相应的响应数据包,包括:

所述第二进程按照所述第二字节序类型,分别对所述数据包的包头、有效数据和包尾进行字节序转换处理,获取转换后的数据包;

所述第二进程对所述转换后的数据包进行解析处理,获取所述转换后的数据包中携带的有效数据,并基于所述有效数据,生成相应的响应数据;

所述第二进程基于所述响应数据,按照所述第二字节序类型表征的字节存储顺序,生成相应的响应数据包。

较佳的,所述第二进程按照自身采用的第二字节序类型,对所述数据包进行字节序转换处理,包括:

所述第二进程按照所述第二字节序类型表征的字节存储顺序,分别对所述数据包携带的每一个字节的存储位置进行调整,完成对所述数据包的字节序转换处理。

一种不同进程间的通信装置,用于运行在不同中央处理器CPU且采用的字节序类型不同的第一应用模块和第二应用模块之间进行通信,所述第二应用模块包括:识别单元,生成单元,以及转换单元;

所述识别单元,用于接收所述第一应用模块发送的数据包,并基于所述数据包携带的指定类型数据的字节序,确定所述第一应用模块采用的第一字节序类型;

所述生成单元,用于按照自身采用的第二字节序类型,对所述数据包进行字节序转换处理,并基于转换后的数据包,按照所述第二字节序类型,生成相应的响应数据包;

所述转换单元,用于按照所述第一字节序类型,对所述响应数据包进行字节序转换处理,并将转换后的响应数据包发送至所述第一应用模块。

较佳的,接收所述第一应用装置发送的数据包之前,所述识别单元进一步用于:

指示所述第一应用模块:按照所述第一字节序类型生成数据包,并直接将所述数据包发送至所述第二应用模块。

较佳的,基于所述数据包携带的指定类型数据的字节序,确定所述第一应用模块采用的第一字节序类型时,所述识别单元用于:

获取所述数据包携带的指定类型数据的字节序;

确定所述指定类型数据的低位字节存储在低地址,高位字节存储在高地址时,判定所述第一应用模块采用的第一字节序类型是小端字节序类型;

确定所述指定类型数据的低位字节存储在高地址,高位字节存储在低地址时,判定所述第一应用模块采用的第一字节序类型是大端字节序类型。

较佳的,按照自身采用的第二字节序类型,对所述数据包进行字节序转换处理,并基于转换后的数据包,按照所述第二字节序类型,生成相应的响应数据包时,所述生成单元用于:

按照所述第二字节序类型,分别对所述数据包的包头、有效数据和包尾进行字节序转换处理,获取转换后的数据包;

对所述转换后的数据包进行解析处理,获取所述转换后的数据包携带的有效数据,并基于所述有效数据,生成相应的响应数据;

基于所述响应数据,按照所述第二字节序类型表征的字节存储顺序,生成相应的响应数据包。

较佳的,按照自身采用的第二字节序类型,对所述数据包进行字节序转换处理时,所述生成单元用于:

按照所述第二字节序类型表征的字节存储顺序,分别对所述数据包携带的每一个字节的存储位置进行调整,完成对所述数据包的字节序转换处理。

本发明实施例的有益效果如下:

本发明实施例中,第一进程在发送数据包之前,无需对上述数据包进行标准网络字节序转换处理,可以直接将上数据包发送至第二进程,从而节省了字节序转换的处理时间,进而提高了通信效率。而且,第二进程接收到第一进程发送的数据包后,不仅可以自动识别第一进程采用的第一字节序类型,而且,还可以按照第一进程采用的第一字节序类型,对生成的响应数据包进行字节序转换处理,使得第一进程在接收到响应数据包后,可以直接读取响应数据包携带的有效响应数据,无需对接收到的响应数据包进行标准网络字节序转换处理,进一步地节省了字节序转换的处理时间,提高了通信效率。除此之外,在保证了第二进程可以自动识别第一进程采用的第一字节序类型的同时,无需对程序代码进行修改,从而有效地降低了程序的开发和维护成本。

附图说明

图1为本发明实施例中不同进程间的通信方法的概况示意图;

图2为本发明实施例中不同进程间的通信方法的具体流程示意图;

图3为本发明实施例中不同进程间的通信装置的功能结构示意图。

具体实施方式

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

为了解决现有技术中存在无法自动识别字节序类型,以及通信效率较低的问题,本发明实施例中,运行在不同CPU且采用的字节序类型不同的第一进程和第二进程进行通信时,第一进程在按照自身采用的字节序类型生成相应的数据包后,无需将该数据包的字节序转换为标准网络字节序,可以直接将按照自身采用的字节序类型生成的数据包发送至第二进程,第二进程在接收到第一进程发送的上述数据包后,可以自动识别上述数据包对应的第一字节序类型,即可以自动识别上述第一进程采用的第一字节序类型,并按照自身采用的第二字节序类型,对上述数据包进行字节序转换处理,以及基于转换后的数据包,按照上述第二字节序类型,生成相应的响应数据包后,会按照上述第一字节序类型,对上述响应数据包进行字节序转换处理,并将转换后的响应数据包发送至上述第一进程。这样,只需要第二进程进行字节序转换,即可实现不同进程间的通信,从而提高了通信效率。

下面通过具体实施例对本发明方案进行详细描述,当然,本发明并不限于以下实施例。

参阅图1所示,本发明实施例中,用于运行在不同CPU且采用的字节序类型不同的第一进程和第二进程之间进行通信时的通信方法的具体流程如下:

步骤100:上述第二进程接收第一进程发送的数据包,并基于上述数据包携带的指定类型数据的字节序,确定上述第一进程采用的第一字节序类型。

实际应用中,上述第一进程与上述第二进程进行通信时,上述第一进程会按照自身采用的第一字节序类型,对有效数据进行打包处理,获取相应的数据包,并将获取到的上述数据包直接发送至上述第二进程,即无需按照标准网络字节序,对上述数据包进行字节序转换处理,减少了字节序转换的处理时间,提高了通信效率。

具体的,上述第二进程接收到第一进程发送的数据包后,会自动读取上述数据包携带的指定类型数据的字节序,并在确定上述指定类型数据的低位字节存储在低地址,高位字节存储在高地址时,判定上述第一进程采用的第一字节序类型是小端字节序类型;在确定上述指定类型数据的低位字节存储在高地址,高位字节存储在低地址时,判定上述第一进程采用的第一字节序类型是大端字节序类型。

较佳的,上述第二进程判断上述第一进程采用的第一字节序类型时,还可以采用但不限于以下方式:读取上述数据包携带的指定类型数据的最低位字节,确定读取到的上述指定类型数据的最低位字节与上述指定类型数据的初始值对应的最低位字节相同,且与上述指定类型数据的初始值对应的最高位字节不同时,判定上述第一进程采用的第一字节序类型是小端字节序类型;确定读取到的上述指定类型数据的最低位字节与上述指定类型数据的初始值对应的最低位字节不同,且与上述指定类型数据的初始值对应的最高位字节相同时,判定上述第一进程采用的第一字节序类型是大端字节序类型。

可选的,上述指定类型数据可以是但不限于是:上述数据包中的固定数据,比如:表征数据包格式的幻数,等等。

例如:假设在应用系统中,运行在不同CPU的进程A和进程B,进程A采用的字节序类型是小端字节序类型,进程B采用的字节序类型是大端字节序类型。

进程A与进程B进行通信时,会按照自身采用的小端字节序类型,对有效数据1进行打包处理,生成数据包1,并直接将数据包1发送至进程B。

进程B接收到进程A发送的数据包1后,会自动读取数据包1携带的幻数值1(假设幻数值1的初始值为0X1122)的最低位1个字节0X22,确定读取到的最低位1个字节0X22与幻数值1的初始值对应的最低位1个字节0X22相同,且与幻数值1的初始值对应的最高位1个字节0X11不同时,判定进程A采用的是小端字节序类型。

步骤101:上述第二进程按照自身采用的第二字节序类型,对上述数据包进行字节序转换处理,并基于转换后的数据包,按照上述第二字节序类型,生成相应的响应数据包。

具体的,上述第二进程确定自身采用的是第二字节序类型与上述第一进程采用的第一字节序类型不同时,会按照自身采用的第二字节序类型,分别对上述数据包的包头、有效数据和包尾进行字节序转换,即按照自身采用的第二字节序类型表征的字节存储顺序,分别对上述数据包的包头对应的每一个字节的存储位置,上述数据包携带的有效数据对应的每一个字节的存储位置,以及上述数据包的包尾对应的每一个字节的存储位置进行调整,获取转换后的数据包。

具体的,上述第二进程获取到转换后的数据包后,对转换后的数据包进行解析处理,获取转换后的数据包携带的有效数据,并基于上述有效数据,生成相应的响应数据,以及基于上述响应数据,按照自身采用的第二字节序类型表征的字节存储顺序,生成相应的响应数据包。

例如:继续沿用上例,进程B确定自身采用的是大端字节序类型与进程A采用的小端字节序类型不同时,按照自身采用的大端字节序类型表征的字节存储顺序,对数据包1的包头对应的每一个字节的存储位置,有效数据1对应的每一个字节的存储位置,以及包尾对应的每一个字节的存储顺序,分别进行调整,获取转换后的数据包1。

进程B对转换后的数据包1进行解析处理,获取转换后的数据包1携带的有效数据1,并基于有效数据1,生成响应数据1,以及基于响应数据1,按照自身采用的大端字节序类型表征的字节存储顺序,生成响应数据包1。

步骤102:上述第二进程按照上述第一字节序类型,对上述响应数据包进行字节序转换处理,并将转换后的响应数据包发送至上述第一进程。

具体地,上述第二进程按照上述第一进程采用的第一字节序类型,对上述响应数据包进行字节序转换处理的方法,与上述第二进程按照自身采用的第二字节序类型,对接收到的上述数据包进行字节序转换处理的方法相同,在此不再赘述。

进一步地,上述第一进程接收到上述转换后的响应数据包后,无需按照自身采用的第一字节序类型,对上述转换后的响应数据包进行字节序转换,可以直接读取上述转换后的响应数据包携带的有效响应数据,并基于上述有效响应数据,完成相应业务操作。至此,上述第一进程与上述第二进程之间的通信结束。

例如:继续沿用上例,进程B按照自身采用的大端字节序类型表征的字节存储顺序,生成响应数据包1后,按照进程A采用的小端字节序类型表征的字节序存储顺序,对响应数据包1的包头对应的每一个字节的存储位置,响应数据1对应的每一个字节的存储位置,以及包尾对应的每一个字节的存储位置分别进行调整,获取转换后的响应数据包1,并将转换后的响应数据包1发送至进程A。

进程A接收到响应数据包1后,直接读取响应数据包1携带的响应数据1,并基于响应数据1,完成相应的业务操作,至此,进程A与进程B之间的通信结束。

下面采用具体的应用场景对上述实施例作进一步详细说明,参阅图2所示,本发明实施例中,用于运行在不同CPU且采用的字节序类型不同的进程A和进程B之间进行通信时的通信方法的具体流程如下:

步骤200:进程A按照自身采用的小端字节序类型,对有效数据1进行打包处理,生成数据包1,并直接将数据包1发送至进程B。

步骤201:进程B接收到进程A发送的数据包1后,自动读取数据包1携带的幻数值1(假设幻数值1的初始值为0X1122)的最低位1个字节0X22。

步骤202:进程B确定读取到的最低位1个字节0X22与幻数值1的初始值对应的最低位1个字节0X22相同,且与幻数值1的初始值对应的最高位1个字节0X11不同时,判定进程A采用的是小端字节序类型。

步骤203:进程B确定自身采用的是大端字节序类型与进程A采用的小端字节序类型不同时,按照自身采用的大端字节序类型表征的字节存储顺序,分别对数据包1的包头、有效数据1和包尾进行字节序转换处理,获取转换后的数据包1。

步骤204:进程B对转换后的数据包1进行解析处理,获取转换后的数据包1携带的有效数据1,并基于有效数据1,生成响应数据1。

步骤205:进程B基于响应数据1,按照自身采用的大端字节序类型表征的字节存储顺序,生成响应数据包1。

步骤206:进程B按照进程A采用的小端字节序类型表征的字节序存储顺序,分别对响应数据包1的包头、响应数据1和包尾进行字节序转换处理,获取转换后的响应数据包1,并将转换后的响应数据包1发送至进程A。

步骤207:进程A接收到响应数据包1后,直接读取响应数据包1携带的响应数据1,并基于响应数据1,完成相应的业务操作。

基于上述实施例,参阅图3所示,本发明实施例中,用于运行在不同中央处理器CPU且采用的字节序类型不同的第一应用模块300和第二应用模块310之间进行通信的通信装置,上述第二应用模块310至少包括:识别单元311,生成单元312,以及转换单元313;

上述识别单元311,用于接收上述第一应用模块300发送的数据包,并基于上述数据包携带的指定类型数据的字节序,确定上述第一应用模块300采用的第一字节序类型;

上述生成单元312,用于按照自身采用的第二字节序类型,对上述数据包进行字节序转换处理,并基于转换后的数据包,按照上述第二字节序类型,生成相应的响应数据包;

上述转换单元313,用于按照上述第一字节序类型,对上述响应数据包进行字节序转换处理,并将转换后的响应数据包发送至上述第一应用模块300。

较佳的,接收上述第一应用装置300发送的数据包之前,上述识别单元311进一步用于:

指示上述第一应用模块300:按照上述第一字节序类型生成数据包,并直接将上述数据包发送至上述第二应用模块310。

较佳的,基于上述数据包携带的指定类型数据的字节序,确定上述第一应用模块300采用的第一字节序类型时,上述识别单元311用于:

获取上述数据包携带的指定类型数据的字节序;

确定上述指定类型数据的低位字节存储在低地址,高位字节存储在高地址时,判定上述第一应用模块300采用的第一字节序类型是小端字节序类型;

确定上述指定类型数据的低位字节存储在高地址,高位字节存储在低地址时,判定上述第一应用模块300采用的第一字节序类型是大端字节序类型。

较佳的,按照自身采用的第二字节序类型,对上述数据包进行字节序转换处理,并基于转换后的数据包,按照上述第二字节序类型,生成相应的响应数据包时,上述生成单元312用于:

按照上述第二字节序类型,分别对上述数据包的包头、有效数据和包尾进行字节序转换处理,获取转换后的数据包;

对上述转换后的数据包进行解析处理,获取上述转换后的数据包携带的有效数据,并基于上述有效数据,生成相应的响应数据;

基于上述响应数据,按照上述第二字节序类型表征的字节存储顺序,生成相应的响应数据包。

较佳的,按照自身采用的第二字节序类型,对上述数据包进行字节序转换处理时,上述生成单元312用于:

按照上述第二字节序类型表征的字节存储顺序,分别对上述数据包携带的每一个字节的存储位置进行调整,完成对上述数据包的字节序转换处理。

综上所述,本发明实施例中,第一进程直接将按照自身采用的第一字节序类型生成的数据包发送至第二进程,上述第二进程接收到上述数据包后,基于上述数据包携带的指定类型数据的字节序,确定上述第一进程采用的第一字节序类型,并在按照自身采用的第二字节序类型,对上述数据包进行字节序转换处理后,基于转换后的数据包,按照自身采用的第二字节序类型,生成相应的响应数据包,以及在按照上述第一进程采用的第一字节序类型,对上述响应数据包进行字节序转换处理后,将转换后的响应数据包发送至上述第一进程。这样,第一进程在发送数据包之前,无需对上述数据包进行标准网络字节序转换处理,可以直接将上数据包发送至第二进程,从而节省了字节序转换的处理时间,进而提高了通信效率。而且,第二进程接收到第一进程发送的数据包后,不仅可以自动识别第一进程采用的第一字节序类型,而且,还可以按照第一进程采用的第一字节序类型,对生成的响应数据包进行字节序转换处理,使得第一进程在接收到响应数据包后,可以直接读取响应数据包携带的有效响应数据,无需对接收到的响应数据包进行标准网络字节序转换处理,进一步地节省了字节序转换的处理时间,提高了通信效率。除此之外,在保证了第二进程可以自动识别第一进程采用的第一字节序类型的同时,无需对程序代码进行修改,从而有效地降低了程序的开发和维护成本。

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

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

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

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

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

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

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