一種進程間通信方法及裝置的制造方法
【技術領域】
[0001 ]本發(fā)明涉及通信技術領域,尤其是一種進程間通信方法及裝置。
【背景技術】
[0002]不同進程之間需要進行通信,例如一個進程向另一進程發(fā)送數(shù)據(jù),或者接收另一進程發(fā)送的數(shù)據(jù)?,F(xiàn)有技術中,不同進程之間的通信方式是共享內(nèi)存的方式,即在內(nèi)存中設置共享區(qū)域,當一個進程需要向另一進程發(fā)送數(shù)據(jù)時,將該數(shù)據(jù)寫入至該共享內(nèi)存區(qū)域中,當寫入完畢后,向另一進程發(fā)送通知,以告知該另一進程可以讀取共享內(nèi)存區(qū)域,或者,修改內(nèi)存特征值,當另一進程監(jiān)測到內(nèi)存特征值被修改后,可以讀取共享內(nèi)存區(qū)域。
[0003]然而,上述基于共享內(nèi)存的進程通信方式,需要控制進程間的讀寫同步,開發(fā)過程較為復雜。
【發(fā)明內(nèi)容】
[0004]有鑒于此,本發(fā)明提供了一種進程間通信方法及裝置,用以解決現(xiàn)有技術中進程間通信方法開發(fā)過程復雜的技術問題。為實現(xiàn)所述目的,本發(fā)明提供的技術方案如下:
[0005]—種進程間通信方法,包括:
[0006]當?shù)谝贿M程生成數(shù)據(jù)時,獲取預先創(chuàng)建的Boost消息隊列;
[0007]將所述數(shù)據(jù)寫入所述Boost消息隊列;
[0008]當接收到所述寫有數(shù)據(jù)的Boost消息隊列時,提取其中的數(shù)據(jù)并發(fā)送至第二進程。
[0009]可選地,所述將所述數(shù)據(jù)寫入所述Boost消息隊列包括:
[0010]確定所述數(shù)據(jù)的長度及所述Boost消息隊列的預設單消息長度;
[0011]當所述數(shù)據(jù)的長度大于所述預設單消息長度時,以所述預設單消息長度為單位,對所述數(shù)據(jù)進行切片,獲得多個切片數(shù)據(jù);
[0012]將所述多個切片數(shù)據(jù)寫入所述Boost消息隊列。
[0013]可選地,所述將所述多個切片數(shù)據(jù)寫入所述Boost消息隊列包括:
[0014]依據(jù)切片順序,將所述多個切片數(shù)據(jù)寫入所述Boost消息隊列。
[0015]可選地,在對所述數(shù)據(jù)進行切片,獲得多個切片數(shù)據(jù)之后,還包括:
[0016]統(tǒng)計所述切片數(shù)據(jù)的個數(shù),并將統(tǒng)計的所述個數(shù)寫入所述Boost消息隊列。
[0017]可選地,所述當接收到所述寫有數(shù)據(jù)的Boost消息隊列時,提取其中的數(shù)據(jù)并發(fā)送至第二進程包括:
[0018]當接收到所述寫有數(shù)據(jù)的Boost消息隊列時,提取其中的切片數(shù)據(jù),直至提取的切片數(shù)據(jù)的個數(shù)等于統(tǒng)計的所述個數(shù);
[0019]拼接提取到的切片數(shù)據(jù),并將拼接獲得的數(shù)據(jù)發(fā)送至第二進程。
[0020]本申請?zhí)峁┝艘环N進程間通信裝置,包括:
[0021]消息隊列獲取模塊,用于當?shù)谝贿M程生成數(shù)據(jù)時,獲取預先創(chuàng)建的Boost消息隊列;
[0022]消息隊列寫入模塊,用于將所述數(shù)據(jù)寫入所述Boost消息隊列;
[0023]進程數(shù)據(jù)提取模塊,用于當接收到所述寫有數(shù)據(jù)的Boost消息隊列時,提取其中的數(shù)據(jù)并發(fā)送至第二進程。
[0024]可選地,所述消息隊列寫入模塊包括:
[0025]長度確定子模塊,用于確定所述數(shù)據(jù)的長度及所述Boost消息隊列的預設單消息長度;
[0026]數(shù)據(jù)切片子模塊,用于當所述數(shù)據(jù)的長度大于所述預設單消息長度時,以所述預設單消息長度為單位,對所述數(shù)據(jù)進行切片,獲得多個切片數(shù)據(jù);
[0027]數(shù)據(jù)寫入子模塊,用于將所述多個切片數(shù)據(jù)寫入所述Boost消息隊列。
[0028]可選地,所述數(shù)據(jù)寫入子模塊包括:
[0029]順序?qū)懭雴卧?,用于依?jù)切片順序,將所述多個切片數(shù)據(jù)寫入所述Boost消息隊列。
[0030]可選地,所述消息隊列寫入模塊還包括:
[0031 ]個數(shù)寫入子模塊,用于在對所述數(shù)據(jù)進行切片,獲得多個切片數(shù)據(jù)之后,統(tǒng)計所述切片數(shù)據(jù)的個數(shù),并將統(tǒng)計的所述個數(shù)寫入所述Boost消息隊列。
[0032]可選地,所述進程數(shù)據(jù)提取模塊包括:
[0033]數(shù)據(jù)提取子模塊,用于當接收到所述寫有數(shù)據(jù)的Boost消息隊列時,提取其中的切片數(shù)據(jù),直至提取的切片數(shù)據(jù)的個數(shù)等于統(tǒng)計的所述個數(shù);
[0034]數(shù)據(jù)拼接子模塊,用于拼接提取到的切片數(shù)據(jù),并將拼接獲得的數(shù)據(jù)發(fā)送至第二進程。
[0035]由以上方案可知,本申請的有益效果是:
[0036]本發(fā)明提供了一種進程間通信方法及裝置,該方法包括:當?shù)谝贿M程生成數(shù)據(jù)時,獲取預先創(chuàng)建的Boost消息隊列,將數(shù)據(jù)直接寫入Boost消息隊列,當?shù)诙M程端設置的接收模塊接收到寫有數(shù)據(jù)的Boost消息隊列時,提取其中的數(shù)據(jù),并將提取的數(shù)據(jù)發(fā)送至第二進程。與現(xiàn)有技術相比,本發(fā)明實施例并未將第一進程的數(shù)據(jù)直接放入共享內(nèi)存,而是將數(shù)據(jù)寫入Boost消息隊列中,利用Boost消息隊列實現(xiàn)第一進程將數(shù)據(jù)通信至第二進程。因而在開發(fā)過程中并不需要控制讀寫同步問題,開發(fā)過程更加簡單。
【附圖說明】
[0037]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
[0038]圖1為本發(fā)明實施例提供的進程間通信方法的流程圖;
[0039]圖2為本發(fā)明實施例提供的發(fā)送模塊及接收模塊的示意圖;
[0040]圖3為本發(fā)明另一實施例提供的進程間通信方法的部分流程圖;
[0041 ]圖4為本發(fā)明實施例提供的進程間通信裝置的結(jié)構(gòu)框圖;
[0042]圖5為本發(fā)明另一實施例提供的進程間通信裝置的部分結(jié)構(gòu)框圖。
【具體實施方式】
[0043]下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0044]參照圖1,其揭示出了本發(fā)明實施例提供的進程間通信方法的流程,具體包括以下流程:
[0045]步驟SlOl:當?shù)谝贿M程生成數(shù)據(jù)時,獲取預先創(chuàng)建的Boost消息隊列。
[0046]其中,當?shù)谝贿M程生成數(shù)據(jù)且需要將該數(shù)據(jù)發(fā)送至第二進程時,則獲取預先創(chuàng)建的Boost消息隊列。Boost消息隊列用于將數(shù)據(jù)發(fā)送至第二進程。
[0047]步驟S102:將所述數(shù)據(jù)寫入所述Boost消息隊列。
[0048]本實施例中,將數(shù)據(jù)直接寫入Boost消息隊列即可,Boost消息隊列的自身可以實現(xiàn)將數(shù)據(jù)發(fā)送至第二進程端,其中,第二進程端預先設置有接收模塊,用于執(zhí)行下一步驟。
[0049]步驟S103:當接收到所述寫有數(shù)據(jù)的Boost消息隊列時,提取其中的數(shù)據(jù)并發(fā)送至第二進程。
[0050]其中,當?shù)诙M程端的接收模塊接收到寫有數(shù)據(jù)的Boost消息隊列時,接收模塊提取其中的數(shù)據(jù),并將提取到的數(shù)據(jù)發(fā)送至第二進程,從而完成第一進程向第二進程發(fā)送數(shù)據(jù)的過程。如圖2所示,在第一進程端設置有發(fā)送模塊,Boost消息隊列調(diào)用發(fā)送模塊實現(xiàn)數(shù)據(jù)的發(fā)送,在第二進程端設置有接收模塊,接收模塊實現(xiàn)數(shù)據(jù)的接收,從而完成不同進程的通信。
[0051]本實施例中,接收模塊可以實時監(jiān)測是否有消息隊列發(fā)送到自身,或者,接收模塊并不進行監(jiān)測,而是消息隊列到達后觸發(fā)接收模塊,則被觸發(fā)的接收模塊提取其中的數(shù)據(jù)。
[0052]由以上的技術方案可知,本實施例提供的進程間通信方法包括:當?shù)谝贿M程生成數(shù)據(jù)時,獲取預先創(chuàng)建的Boost消息隊列,直接將數(shù)據(jù)寫入Boost消息隊列中,利用Boost消息隊列自身的機制實現(xiàn)將數(shù)據(jù)發(fā)往第二進程端,當?shù)诙M程端設置的接收模塊接收到寫有數(shù)據(jù)的Boost消息隊列時,提取其中的數(shù)據(jù),并將提取的數(shù)據(jù)發(fā)送至第二進程。
[0053]簡單而言,本發(fā)明實施例在第一進程端以寫模式創(chuàng)建Boost消息隊列,在第二進程端以讀模式打開該消息隊列。第一進程端在Boost消息隊列中寫入數(shù)據(jù),第二進程端讀取其中的數(shù)據(jù)。與現(xiàn)有技術相比,本發(fā)明實施例并未將第一進程的數(shù)據(jù)直接放入共享內(nèi)存,而是利用Boost消息隊列將數(shù)據(jù)發(fā)送至第二進程。這樣,本發(fā)明實施例在開發(fā)過程中并不需要控制進程間訪問共享內(nèi)存時的讀寫同步操作,開發(fā)過程更加簡單。
[0054]需要說明的是,兩個進程是在同一臺設備中,且并不限定設備使用的平臺類型,可以是Linux平臺,也可以是Windows平臺。另外,第一進程向第二進程發(fā)送的進程數(shù)據(jù)可以為調(diào)用數(shù)據(jù),該調(diào)用數(shù)據(jù)觸發(fā)第二進程向第一進程發(fā)送進程數(shù)據(jù),從而實現(xiàn)第一進程對第二進程的調(diào)用。當然,第二進程向第一進程發(fā)送進程數(shù)據(jù)的方式可以是本發(fā)明實施例提供的進程間通?目方法。
[0055]創(chuàng)建消息隊列時,需要設置消息隊列中單個消息的長度。在內(nèi)存總量較小且性能要求較低的情況下,可以設置較小的消息長度值,需要說明,消息長度的具體數(shù)值可以根據(jù)實際的進程交互數(shù)據(jù)大小而定,本發(fā)明中各個實施例并不做限定。當設置的消息長度較小,而待發(fā)送的數(shù)據(jù)量較大時,需要將數(shù)據(jù)進行切片。也即,如圖3所示,上述實施例中,將數(shù)據(jù)寫入Boost消息隊列的具體實現(xiàn)方式可以是:
[0056]步驟S201:確定所述數(shù)據(jù)的長度及所述Boost消息隊列的預設單消息長度。
[0057]其中,創(chuàng)建Boost消息隊列時,預先設置單個消息的長度值,用以限制消息隊列中每個消息的大小。
[0058]步驟S202:當所述數(shù)據(jù)的長度大于所述預設單消息長度時,以所述預設單消息長度為單位,對所述數(shù)據(jù)進行切片,獲得多個切片數(shù)據(jù)。
[0059]也就是說,當數(shù)據(jù)的長度較大時,以預設單消息長度為單位,將數(shù)據(jù)切分為多個數(shù)據(jù)。例如,單消息長度為10K,數(shù)據(jù)為200K大小,則將數(shù)據(jù)切分為20個10K大小的切片數(shù)據(jù)。
[0060]需要說明的是,即使切分的最后一部分數(shù)據(jù)小于單消息長度時,也將該部分數(shù)據(jù)作為一個切片數(shù)據(jù)。例如,單消息長度為10K,進程消息為205K大小,則將數(shù)據(jù)切分為21個切片數(shù)據(jù),