一种进程间通信方法及装置制造方法

文档序号:6640402阅读:265来源:国知局
一种进程间通信方法及装置制造方法
【专利摘要】本申请提供了一种进程间通信方法及装置,该方法包括:当第一进程生成数据时,获取预先创建的Boost消息队列,将数据直接写入Boost消息队列,当第二进程端设置的接收模块接收到写有数据的Boost消息队列时,提取其中的数据,并将提取的数据发送至第二进程。与现有技术相比,本发明实施例并未将第一进程的数据直接放入共享内存,而是将数据写入Boost消息队列中,利用Boost消息队列实现第一进程将数据通信至第二进程。因而在开发过程中并不需要控制读写同步问题,开发过程更加简单。
【专利说明】一种进程间通信方法及装置

【技术领域】
[0001]本发明涉及通信【技术领域】,尤其是一种进程间通信方法及装置。

【背景技术】
[0002]不同进程之间需要进行通信,例如一个进程向另一进程发送数据,或者接收另一进程发送的数据。现有技术中,不同进程之间的通信方式是共享内存的方式,即在内存中设置共享区域,当一个进程需要向另一进程发送数据时,将该数据写入至该共享内存区域中,当写入完毕后,向另一进程发送通知,以告知该另一进程可以读取共享内存区域,或者,修改内存特征值,当另一进程监测到内存特征值被修改后,可以读取共享内存区域。
[0003]然而,上述基于共享内存的进程通信方式,需要控制进程间的读写同步,开发过程较为复杂。


【发明内容】

[0004]有鉴于此,本发明提供了一种进程间通信方法及装置,用以解决现有技术中进程间通信方法开发过程复杂的技术问题。为实现所述目的,本发明提供的技术方案如下:
[0005]一种进程间通信方法,包括:
[0006]当第一进程生成数据时,获取预先创建的Boost消息队列;
[0007]将所述数据写入所述Boost消息队列;
[0008]当接收到所述写有数据的Boost消息队列时,提取其中的数据并发送至第二进程。
[0009]可选地,所述将所述数据写入所述Boost消息队列包括:
[0010]确定所述数据的长度及所述Boost消息队列的预设单消息长度;
[0011]当所述数据的长度大于所述预设单消息长度时,以所述预设单消息长度为单位,对所述数据进行切片,获得多个切片数据;
[0012]将所述多个切片数据写入所述Boost消息队列。
[0013]可选地,所述将所述多个切片数据写入所述Boost消息队列包括:
[0014]依据切片顺序,将所述多个切片数据写入所述Boost消息队列。
[0015]可选地,在对所述数据进行切片,获得多个切片数据之后,还包括:
[0016]统计所述切片数据的个数,并将统计的所述个数写入所述Boost消息队列。
[0017]可选地,所述当接收到所述写有数据的Boost消息队列时,提取其中的数据并发送至第二进程包括:
[0018]当接收到所述写有数据的Boost消息队列时,提取其中的切片数据,直至提取的切片数据的个数等于统计的所述个数;
[0019]拼接提取到的切片数据,并将拼接获得的数据发送至第二进程。
[0020]本申请提供了一种进程间通信装置,包括:
[0021]消息队列获取模块,用于当第一进程生成数据时,获取预先创建的Boost消息队列;
[0022]消息队列写入模块,用于将所述数据写入所述Boost消息队列;
[0023]进程数据提取模块,用于当接收到所述写有数据的Boost消息队列时,提取其中的数据并发送至第二进程。
[0024]可选地,所述消息队列写入模块包括:
[0025]长度确定子模块,用于确定所述数据的长度及所述Boost消息队列的预设单消息长度;
[0026]数据切片子模块,用于当所述数据的长度大于所述预设单消息长度时,以所述预设单消息长度为单位,对所述数据进行切片,获得多个切片数据;
[0027]数据写入子模块,用于将所述多个切片数据写入所述Boost消息队列。
[0028]可选地,所述数据写入子模块包括:
[0029]顺序写入单元,用于依据切片顺序,将所述多个切片数据写入所述Boost消息队列。
[0030]可选地,所述消息队列写入模块还包括:
[0031]个数写入子模块,用于在对所述数据进行切片,获得多个切片数据之后,统计所述切片数据的个数,并将统计的所述个数写入所述Boost消息队列。
[0032]可选地,所述进程数据提取模块包括:
[0033]数据提取子模块,用于当接收到所述写有数据的Boost消息队列时,提取其中的切片数据,直至提取的切片数据的个数等于统计的所述个数;
[0034]数据拼接子模块,用于拼接提取到的切片数据,并将拼接获得的数据发送至第二进程。
[0035]由以上方案可知,本申请的有益效果是:
[0036]本发明提供了一种进程间通信方法及装置,该方法包括:当第一进程生成数据时,获取预先创建的Boost消息队列,将数据直接写入Boost消息队列,当第二进程端设置的接收模块接收到写有数据的Boost消息队列时,提取其中的数据,并将提取的数据发送至第二进程。与现有技术相比,本发明实施例并未将第一进程的数据直接放入共享内存,而是将数据写入Boost消息队列中,利用Boost消息队列实现第一进程将数据通信至第二进程。因而在开发过程中并不需要控制读写同步问题,开发过程更加简单。

【专利附图】

【附图说明】
[0037]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
[0038]图1为本发明实施例提供的进程间通信方法的流程图;
[0039]图2为本发明实施例提供的发送模块及接收模块的示意图;
[0040]图3为本发明另一实施例提供的进程间通信方法的部分流程图;
[0041]图4为本发明实施例提供的进程间通信装置的结构框图;
[0042]图5为本发明另一实施例提供的进程间通信装置的部分结构框图。

【具体实施方式】
[0043]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0044]参照图1,其揭示出了本发明实施例提供的进程间通信方法的流程,具体包括以下流程:
[0045]步骤SlOl:当第一进程生成数据时,获取预先创建的Boost消息队列。
[0046]其中,当第一进程生成数据且需要将该数据发送至第二进程时,则获取预先创建的Boost消息队列。Boost消息队列用于将数据发送至第二进程。
[0047]步骤S102:将所述数据写入所述Boost消息队列。
[0048]本实施例中,将数据直接写入Boost消息队列即可,Boost消息队列的自身可以实现将数据发送至第二进程端,其中,第二进程端预先设置有接收模块,用于执行下一步骤。
[0049]步骤S103:当接收到所述写有数据的Boost消息队列时,提取其中的数据并发送至第二进程。
[0050]其中,当第二进程端的接收模块接收到写有数据的Boost消息队列时,接收模块提取其中的数据,并将提取到的数据发送至第二进程,从而完成第一进程向第二进程发送数据的过程。如图2所示,在第一进程端设置有发送模块,Boost消息队列调用发送模块实现数据的发送,在第二进程端设置有接收模块,接收模块实现数据的接收,从而完成不同进程的通信。
[0051]本实施例中,接收模块可以实时监测是否有消息队列发送到自身,或者,接收模块并不进行监测,而是消息队列到达后触发接收模块,则被触发的接收模块提取其中的数据。
[0052]由以上的技术方案可知,本实施例提供的进程间通信方法包括:当第一进程生成数据时,获取预先创建的Boost消息队列,直接将数据写入Boost消息队列中,利用Boost消息队列自身的机制实现将数据发往第二进程端,当第二进程端设置的接收模块接收到写有数据的Boost消息队列时,提取其中的数据,并将提取的数据发送至第二进程。
[0053]简单而言,本发明实施例在第一进程端以写模式创建Boost消息队列,在第二进程端以读模式打开该消息队列。第一进程端在Boost消息队列中写入数据,第二进程端读取其中的数据。与现有技术相比,本发明实施例并未将第一进程的数据直接放入共享内存,而是利用Boost消息队列将数据发送至第二进程。这样,本发明实施例在开发过程中并不需要控制进程间访问共享内存时的读写同步操作,开发过程更加简单。
[0054]需要说明的是,两个进程是在同一台设备中,且并不限定设备使用的平台类型,可以是Linux平台,也可以是Windows平台。另外,第一进程向第二进程发送的进程数据可以为调用数据,该调用数据触发第二进程向第一进程发送进程数据,从而实现第一进程对第二进程的调用。当然,第二进程向第一进程发送进程数据的方式可以是本发明实施例提供的进程间通信方法。
[0055]创建消息队列时,需要设置消息队列中单个消息的长度。在内存总量较小且性能要求较低的情况下,可以设置较小的消息长度值,需要说明,消息长度的具体数值可以根据实际的进程交互数据大小而定,本发明中各个实施例并不做限定。当设置的消息长度较小,而待发送的数据量较大时,需要将数据进行切片。也即,如图3所示,上述实施例中,将数据写入Boost消息队列的具体实现方式可以是:
[0056]步骤S201:确定所述数据的长度及所述Boost消息队列的预设单消息长度。
[0057]其中,创建Boost消息队列时,预先设置单个消息的长度值,用以限制消息队列中每个消息的大小。
[0058]步骤S202:当所述数据的长度大于所述预设单消息长度时,以所述预设单消息长度为单位,对所述数据进行切片,获得多个切片数据。
[0059]也就是说,当数据的长度较大时,以预设单消息长度为单位,将数据切分为多个数据。例如,单消息长度为10K,数据为200K大小,则将数据切分为20个10K大小的切片数据。
[0060]需要说明的是,即使切分的最后一部分数据小于单消息长度时,也将该部分数据作为一个切片数据。例如,单消息长度为10K,进程消息为205K大小,则将数据切分为21个切片数据,其中包括一个5K的切片数据。
[0061]步骤S203:将所述多个切片数据写入所述Boost消息队列。
[0062]其中,可以为每个切片数据设置对应的顺序标识,将多个设置有顺序标识的切片数据写入Boost消息队列。或者,直接依据切片顺序,将多个切片数据写入Boost消息队列。在同一消息队列中的多个切片进程具有相同的进程标识,该进程标识为发送进程的标识即第一进程标识。
[0063]在该种实现方式中,消息队列中包含多个切片数据。第二进程端接收模块接收到消息队列后,需要依次提取多个切片数据,并拼接为完整的数据。为了保证接收模块准确提取到全部的切片数据,可以在Boost消息队列中写入切片数据的个数。即:
[0064]在对所述数据进行切片,获得多个切片数据之后,统计所述切片数据的个数,并将统计的所述个数写入所述Boost消息队列。
[0065]因此,封装的Boost消息队列中包含有切片数据的个数。当第二进程端接收到Boost消息队列时,可以依据提取到的切片数据的个数,进行数据的提取。具体地:
[0066]当接收到所述写有数据的Boost消息队列时,提取其中的切片数据,直至提取的切片数据的个数等于统计的所述个数;拼接提取到的切片数据,并将拼接获得的数据发送至第二进程。
[0067]若切片数据具有顺序标识,则将提取到的切片数据按照顺序标识进行拼接;若切片数据并无标识,而是按照切片顺序写入Boost消息队列时,可以依次提取并依次拼接,拼接获得的数据为完整的数据。
[0068]下面对本发明实施例提供的进程间通信装置进行说明,需要说明的是,以下对本发明实施例提供的进程间通信装置的介绍可以与上文的进程间通信方法相互参照。
[0069]参照图4,其示出了本发明实施例提供的进程间通信装置的结构,具体包括:消息队列获取模块100、消息队列写入模块200及进程数据提取模块300 ;其中:
[0070]消息队列获取模块100,用于当第一进程生成数据时,获取预先创建的Boost消息队列;
[0071]消息队列写入模块200,用于将所述数据写入所述Boost消息队列;
[0072]进程数据提取模块300,用于当接收到所述写有数据的Boost消息队列时,提取其中的数据并发送至第二进程。
[0073]由以上的技术方案可知,本实施例提供的进程间通信装置中,当第一进程生成数据时,消息队列获取模块100获取预先创建的Boost消息队列,消息队列写入模块200直接将数据写入Boost消息队列中,当接收到写有数据的Boost消息队列时,进程数据提取模块300提取其中的数据,并将提取的数据发送至第二进程。与现有技术相比,本发明实施例并未将第一进程的数据放入共享内存,而是利用Boost消息队列直接将数据发送至第二进程。这样,本发明实施例并不需要进程间访问共享内存时的读写同步操作,开发方式更加简单。
[0074]需要说明,本实施例中的消息队列获取模块100、消息队列写入模块200可以认为是上述方法实施例中的发送模块,集成在第一进程端,用于发送第一进程生成的数据,进程数据提取模块300可以认为是上述方法实施例中的接收模块,集成在第二进程端,用于接收数据。当然,第一进程端及第二进程端可均全部设置发送模块及接收模块,则每个进程既可以发送数据,也可以接收数据。
[0075]如图5所示,其中,上述进程间通信装置中的消息队列写入模块200可以包括:长度确定子模块201、数据切片子模块202及数据写入子模块203。其中:
[0076]长度确定子模块201,用于确定所述数据的长度及所述Boost消息队列的预设单消息长度;
[0077]数据切片子模块202,用于当所述数据的长度大于所述预设单消息长度时,以所述预设单消息长度为单位,对所述数据进行切片,获得多个切片数据;
[0078]数据写入子模块203,用于将所述多个切片数据写入所述Boost消息队列。
[0079]其中,上述进程间通信装置中的数据写入子模块203可以包括:
[0080]顺序写入单元,用于依据切片顺序,将所述多个切片数据写入所述Boost消息队列。
[0081]如图5所示,可选地,上述的进程间通信装置中的消息队列写入模块200还可以包括:
[0082]个数写入子模块204,用于在对所述数据进行切片,获得多个切片数据之后,统计所述切片数据的个数,并将统计的所述个数写入所述Boost消息队列。
[0083]可选地,上述进程间通信装置中的进程数据提取模块300可以包括:
[0084]数据提取子模块,用于当接收到所述写有数据的Boost消息队列时,提取其中的切片数据,直至提取的切片数据的个数等于统计的所述个数;
[0085]数据拼接子模块,用于拼接提取到的切片数据,并将拼接获得的数据发送至第二进程。
[0086]需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
[0087]还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括上述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0088]对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
【权利要求】
1.一种进程间通信方法,其特征在于,包括: 当第一进程生成数据时,获取预先创建的Boost消息队列; 将所述数据写入所述Boost消息队列; 当接收到所述写有数据的Boost消息队列时,提取其中的数据并发送至第二进程。
2.根据权利要求1所述的进程间通信方法,其特征在于,所述将所述数据写入所述Boost消息队列包括: 确定所述数据的长度及所述Boost消息队列的预设单消息长度; 当所述数据的长度大于所述预设单消息长度时,以所述预设单消息长度为单位,对所述数据进行切片,获得多个切片数据; 将所述多个切片数据写入所述Boost消息队列。
3.根据权利要求2所述的进程间通信方法,其特征在于,所述将所述多个切片数据写入所述Boost消息队列包括: 依据切片顺序,将所述多个切片数据写入所述Boost消息队列。
4.根据权利要求2所述的进程间通信方法,其特征在于,在对所述数据进行切片,获得多个切片数据之后,还包括: 统计所述切片数据的个数,并将统计的所述个数写入所述Boost消息队列。
5.根据权利要求4所述的进程间通信方法,其特征在于,所述当接收到所述写有数据的Boost消息队列时,提取其中的数据并发送至第二进程包括: 当接收到所述写有数据的Boost消息队列时,提取其中的切片数据,直至提取的切片数据的个数等于统计的所述个数; 拼接提取到的切片数据,并将拼接获得的数据发送至第二进程。
6.一种进程间通信装置,其特征在于,包括: 消息队列获取模块,用于当第一进程生成数据时,获取预先创建的Boost消息队列; 消息队列写入模块,用于将所述数据写入所述Boost消息队列; 进程数据提取模块,用于当接收到所述写有数据的Boost消息队列时,提取其中的数据并发送至第二进程。
7.根据权利要求6所述的进程间通信装置,其特征在于,所述消息队列写入模块包括: 长度确定子模块,用于确定所述数据的长度及所述Boost消息队列的预设单消息长度; 数据切片子模块,用于当所述数据的长度大于所述预设单消息长度时,以所述预设单消息长度为单位,对所述数据进行切片,获得多个切片数据; 数据写入子模块,用于将所述多个切片数据写入所述Boost消息队列。
8.根据权利要求7所述的进程间通信装置,其特征在于,所述数据写入子模块包括: 顺序写入单元,用于依据切片顺序,将所述多个切片数据写入所述Boost消息队列。
9.根据权利要求7所述的进程间通信装置,其特征在于,所述消息队列写入模块还包括: 个数写入子模块,用于在对所述数据进行切片,获得多个切片数据之后,统计所述切片数据的个数,并将统计的所述个数写入所述Boost消息队列。
10.根据权利要求9所述的进程间通信装置,其特征在于,所述进程数据提取模块包括: 数据提取子模块,用于当接收到所述写有数据的Boost消息队列时,提取其中的切片数据,直至提取的切片数据的个数等于统计的所述个数; 数据拼接子模块,用于拼接提取到的切片数据,并将拼接获得的数据发送至第二进程。
【文档编号】G06F9/54GK104503854SQ201410837300
【公开日】2015年4月8日 申请日期:2014年12月29日 优先权日:2014年12月29日
【发明者】罗鹰, 李亮, 林康, 侯勇军 申请人:成都科来软件有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1