專利名稱:一種實現消息通信的裝置及方法
技術領域:
本發明涉及計算機通信技術領域,特別是一種實現消息通信的裝置及方法。
背景技術:
現代操作系統一般提供多進程機制,允許多個進程并發執行。并發的多個 進程之間需要竟爭共享資源、執行順序有內在的依賴關系、需要交互一些信息, 這些都要涉及到進程間通信。
進程間通信可以采用消息隊列、共享內存、信號量等方法。操作系統一般 都會自帶消息通信的編程接口。但功能上可能會有些限制。從軟件編程的角度 而言, 一般不會直接依賴操作系統的接口,而通過一層屏蔽層提高可移植性。
但是,目前要實現應用進程之間通信,都務農賴操作系統提供通信的接口 , 這使得應用進程必須根據特定操作系統提供的接口進行編程,由于每個操作系 統提供的編程接口可能不同,所以應用進程也不方便移植。
發明內容
本發明的實施例主要目的是提供一種實現消息通信的裝置及方法,用于屏 蔽具體操作系統接口的差異,使應用進程之間實現消息通信時,可以不依賴具 體的操作系統接口。
本發明的實施例提供的一種實現消息通信的裝置,應用于應用進程之間進
行消息通信的過程中,該裝置可以這樣實現
該裝置包括可以包括消息通信管理進程單元,第一消息通信管理單元, 以及第二消息通信管理單元,每個消息通信管理單元對應一個應用進程;其中,
第一消息通信管理單元,用于根據源應用進程指定的目的應用進程信息, 將來自源應用進程的消息發送到消息通信管理進程單元中創建的對應目的應
用進程的消息隊列中;
第二消息通信管理單元,用于從消息通信管理進程單元中目的應用進程的 消息隊列中取出消息發送給對應的目的應用進程;
所述消息通信管理進程單元,用于為目標應用進程創建并管理消息隊列。
本發明的實施例提供的一種實現消息通信的方法可以這樣實現
A. 根據源應用進程指定的目的應用進程信息,將來自源應用進程的消息 發送至為該目的應用進;f呈創建的消息隊列中;
B. 從所述消息隊列中取出消息,并將該消息發送給目標應用進程。
從上述技術方案可知,在本發明的實施例中,源應用進程對應的消息通信
管理單元直接將來自源應用進程的消息發送到目的應用進程的消息隊列,再由 目的應用進程對應的消息通信管理單元將該消息從消息隊列中取出交給目的 應用進程。這樣,本發明可以屏蔽具體操作系統接口的差異,方便應用程序移 植,使應用進程之間實現消息通信時,可以不依賴具體的操作系統接口。而且, 本發明的實施例還將消息管理集中在消息通信管理進程單元中進行,結構簡 單,復雜度低,靈活性和可擴展性高。
圖1為實現本發明裝置的結構示意圖; 圖2為實現本發明裝置的實施例結構示意圖; 圖3為實現本發明方法的流程示意圖; 圖4為本發明實現跟蹤功能的示意圖。
具體實施例方式
本發明實施例的核心思想是根據源應用進程指定的目的應用進程信息,將來自源應用進程的消息發送至預先為該目的應用進程創建的消息隊列中;從 所述消息隊列中取出消息,并將該消息發送給目標應用進程。
所述源應用進程指定的目的應用進程信息為目的應用進程標識,或為組播 組標識,或為廣播-標識。
根據不同的目的應用進程信息,將來自源應用進程的消息發送至預先為該 目的應用進程創建的消息隊列中的方式稍有不同。具體如下
當目的應用進程信息包括目的應用進程標識時,需要根據預先保存的目的 應用進程標識與消息隊列標識的第一對應關系,確定所述目的應用進程標識對 應的消息隊列標識;根據所述消息隊列標識將該消息發送給對應的消息隊列
中;
當目的應用進程信息包括組播組標識時,需要根據預先保存的組播組標識 和該組播組中所有目的應用進程標識的第二對應關系,確定該組播組內所有目
的應用進程標識;根據預先保存的目的應用進程標識與消息隊列標識的第一對 應關系,確定該組播組內每個目的應用進程標識對應的消息隊列標識;根據消 息隊列標識將該消息發送給對應的消息隊列中;
當源應用進程指定的目的應用進程信息為廣播標識時,直接將該消息發送 給所有應用進程的消息隊列中即可。
參見圖1所示,本發明的實施例的裝置包括多個消息通信管理單元11和 消息通信管理進程單元12。其中,每個消息通信管理單元對應一個應用進程。 在本發明實施例的裝置中,將源應用進程對應的消息通信管理單元稱為第一消 息通信管理單元,將目的應用進程對應的消息通信管理單元稱為第二消息通信 管理單元。第一消息通信管理單元,用于根據源應用進程指定的目的應用進程 信息,將來自源應用進程的消息發送到消息通信管理進程單元12中創建的對 應目的應用進程的消息隊列中;第二消息通信管理單元,用于從消息通信管理 進程單元中目的應用進程的消息隊列中取出消息發送給對應的目的應用進程; 消息通信管理進程單元12,用于為目標應用進程創建并管理消息隊列。
目的應用進程^f言息可以為目的應用進程標識,可以為包4舌一個以上目的應 用進程的組#~組標識,也可以為廣^"標識。
參見圖2所示,本發明的實施例的裝置還可以進一步包括存儲單元13,在 該存儲單元中保存對應用進程的消息進行管理的進程數據信息。消息通信管理 單元根據存儲單元中保存的進程數據對應用進程的消息進行管理。這里,進行 管理的消息通信管理單元既可以是第一消息通信管理單元,也可以是第二消息 通信管理單元。存儲單元可以為內存。
在實現管理功能時,內存包括共享內存數據區頭、進程數據區、消息通信 管理單元數據區,所述共享內存數據區頭用于記錄相關管理數據頭的地址,所 述進程數據區用于記錄需要使用的相關管理數據的地址;所述消息通信管理單 元數據區用于記錄保存管理數據以及該管理數據所屬進程的數據地址;每個消 息通信管理單元ll,還包括消息管理單元,用于記錄內存中所保存的自身對應 應用進程的進程數據的地址,根據該地址從所述內存中獲得對應的進程數據, 再根據獲得的進程數據進行管理。
所述消息通信管理進程單元12包括消息隊列增加單元、消息隊列修改 單元和消息隊列刪除單元。其中,消息隊列增加單元,用于對存儲單元中的數 據信息進行增加操作;消息隊列修改單元,用于對存儲單元中的數據信息進行 修改操作;消息隊列刪除單元,用于對存儲單元中的數據信息進行刪除操作。
本發明的實施例的裝置可以看作不同操作系統的應用進程間通信中提供 了統一的通信接口,屏蔽了具體操作系統接口的差異,源應用進程和目的應用 進程通信時,不需要考慮目的應用進程所在的操作系統的接口特性,即可實現 通信。而且,源應用進程對應的消息通信管理單元直接將來自源應用進程的消 息發送到消息隊列,再由目的應用進程對應的消息通信管理單元將該消息從消 息隊列中取出消息發送目的應用進程,因此,通信效率高。
參見圖3所示,基于上述本發明的實施例的裝置實現消息通信的方法具體 包括以下步驟
步驟301:源應用進程向第一消息通信管理單元輸入含有目的應用進程信 息的發送消息。
步驟302:第一消息通信管理單元收到該消息后,根據所述目的應用進程 信息,將該消息發送至所述消息通信管理進程單元為該目的應用進程創建的消 息隊列中。
步驟303:第二消息通信管理單元從所述消息隊列中取出消息,并將該消 息輸出給目標應用進程進行處理。
目的應用進程信息可以為目的應用進程標識,可以為包括一個以上目的應 用進程的組播組標識,也可以為廣播標識。這里,可以預先保存目的應用進程 標識與消息隊列標識的第一對應關系;在步驟302中第一消息通信管理單元收 到消息后,如果目的應用進程信息為目的應用進程標識,可以獲得目的應用進 程標識對應的消息隊列標識,并將消息發送給該消息隊列標識對應的消息通信 管理進程單元中創建的消息隊列中;目的應用進程對應的消息通信管理單元, 即第二消息通信管理單元實時監測該目的應用進程對應的消息隊列,當監測到 有消息時,從所述消息隊列中取出消息,并將該消息發送給目標應用進程進行 處理。
當然,還可以進一步保存組播組標識和該組播組包括的所有目的應用進程 標識的第二對應關系;在步驟302中第一消息通信管理單元收到消息后,如果 目的應用進程信息為組播組標識,首先根據所述第二對應關系獲得該組播組標 識所對應的所有目的應用進程標識,然后根據第一對應關系,獲得每個目的應 用進程標識對應的消息隊列標識,并將該消息發送務爭個消息隊列標識對應的 消息通信管理進程單元中創建的消息隊列中;每個目的應用進程對應的消息通 信管理單元,即第二消息通信管理單元實時監測該目的應用進程對應的消息隊 列,當監測到有消息時,從所述消息隊列中取出消息,并將該消息輸出給目標 應用進程進行處理。
當源應用進程指定的目的應用進程信息為廣播標識時,第一消息通信管理單元收到源應用進程的消息后,將該消息發送給所有應用進程對應的消息通信 管理進程單元中創建的消息隊列中。
在本發明的實施例中,可以將上述第 一對應關系和第二對應關系保存在一 內存中,該內存對所有消息通信管理單元是共享的,每個消息通信管理單元都 可以查詢訪問內存的信息,用于第一對應關系、第二對應關系、以及其它共享 信息。
而且,為了實現對消息的各種管理功能,可以將內存劃分為三個區域,分 別為內存數據區頭、進程數據區、消息通信管理單元數據區,這三個區域分別 用于存儲消息管理相關管理數據頭的地址、需要使用的相關管理數據的地址、 保存管理數據以及該管理數據所屬進程的數據地址。并且,消息通信管理單元
在步驟303之后,消息通信管理單元可以查詢該內存存儲的管理信息,對 消息進行消息管理。
下面結合附圖以對消息進行跟蹤管理為例說明本發明的實施例通過共享 內存來實現管理的方案。
跟蹤的目的是將符合跟蹤過濾條件的消息發送給啟動跟蹤者,由于發送消 息是由消息通信管理單元完成的,將包括跟蹤過濾條件的跟蹤項數據放在內存 中,消息通信管理單元在發送消息到目的應用進程時,可以才艮據內存中保存的 所述目的應用進程的跟蹤過濾條件,判斷該消息是否符合跟蹤過濾條件,并將 符合跟蹤過濾條件的消息發送給啟動跟蹤的應用進程。此時,向啟動跟蹤的應 用進程發送該消息的方法與本發明發送消息的方法 一樣。
如圖4所示,共享內存中記錄了共享內存數據區頭、進程數據、跟蹤項數 據和跟蹤記錄數據。共享內存數據區頭包括最大跟蹤項個數、進程數據塊頭偏 移、跟蹤項數據塊頭偏移、跟蹤記錄數據塊頭偏移。進程數據中包括多個進程 的數據塊,以及每個進程的跟蹤記錄塊頭偏移,該偏移再結合跟蹤記錄數據塊 頭偏移可確定該進程的跟蹤記錄數據地址。跟蹤項數據記錄了多個跟蹤項數據,主要包括以下內容跟蹤ID、跟蹤者進程數據偏移、跟蹤過濾條件,每個 進程的跟蹤記錄數據中記錄著該進程所匹配的跟蹤項數據偏移,每個進程的跟 蹤記錄數據個數為最大跟蹤項個數。跟蹤記錄數椐記錄了該進程對應的各個跟 蹤項數據偏移,該偏移與跟蹤項數據偏移結合就可確定對應的跟蹤項數據的地 址,跟蹤項數據記錄了跟蹤ID、跟蹤者進程數據偏移和跟蹤過濾條件。跟蹤過 濾條件中記錄跟蹤標志以及所有跟蹤條件,其中跟蹤標志置位表示需要跟蹤, 復位表示不需要跟蹤,跟蹤條件中包含發送進程標識、接收進程標識、消息長 度范圍等。
消息通信管理單元記錄包括對應應用進程在共享內存中的數據偏移,當進 行消息管理時,消息通信管理單元可以4艮據該偏移結合應用進程^:據塊頭偏移 可確定該應用進程數據塊的地址。
在內存中設置跟蹤條件可以由消息通信管理進程單元進行。具體如下消 息通信管理進程單元從跟蹤項數據中找到一個空閑項,將跟蹤過濾條件記錄在 跟蹤項中,并且在進程數據中查找啟動跟蹤者的進程數據偏移,也記錄在跟蹤 項中,除此之外,消息通信管理進程單元在進程數據中查找和跟蹤條件匹配的 進程,并在該進程對應的跟蹤記錄數據中記錄對應的跟蹤項的偏移。當然,如 果在設置一個新的跟蹤條件時,被跟蹤對象還不存在,因此,無法在被跟蹤對 象的相應數據區記錄和該跟蹤項的對應關系,所以在增加一個通信方時,即應 用進程時,需要檢查所有跟蹤塊,記錄與它所匹配的所有跟蹤塊。
當被跟蹤的進程對應的消息通信管理單元發送消息時,判斷本進程數據對 應的跟蹤記錄數據中是否存在跟蹤項的偏移,如果存在,才艮據偏移找到對應的 跟蹤項,根據跟蹤項中記錄的啟動跟蹤者的進程數據偏移找到啟動跟蹤者的進 程數據,再得到啟動跟蹤者的隊列ID,按照該ID就可以將消息發送給啟動跟 蹤的進程。
上述跟蹤實現方案,通過共享內存對消息進行管理,該方式由于跟蹤記錄 數據中僅記錄對應的跟蹤項數據的偏移,因此,占用最少的內存資源;由于跟蹤項數據中記錄跟蹤者的進程數據偏移,而不是跟蹤者的通信名稱,因此,可 以直接找到跟蹤者的進程數據,加快處理效率。數據管理簡單、占用內存資源 少、跟蹤對性能的影響低。
權利要求
1、一種實現消息通信的裝置,其特征在于,該裝置包括消息通信管理進程單元,第一消息通信管理單元,以及第二消息通信管理單元,每個消息通信管理單元對應一個應用進程;其中,第一消息通信管理單元,用于根據源應用進程指定的目的應用進程信息,將來自源應用進程的消息發送到消息通信管理進程單元中創建的對應目的應用進程的消息隊列中;第二消息通信管理單元,用于從消息通信管理進程單元中目的應用進程的消息隊列中取出消息發送給對應的目的應用進程;所述消息通信管理進程單元,用于為目標應用進程創建并管理消息隊列。
2、 根據權利要求1所述的裝置,其特征在于,所述第一消息通信管理單 元,用于當所述目的應用進程信息包括目的應用進程標識時,才艮據目的應用進 程標識與消息隊列標識的第一對應關系,確定目的應用進程標識對應的消息隊 列標識;根據所述消息隊列標識將該消息發送到消息通信管理進程單元中創建 的對應的消息隊列中。
3、 根據權利要求1所述的裝置,其特征在于,所述第一消息通信管理單 元,用于當所述目的應用進程信息為包括組播組標識時,才艮據組播組標識和該 組播組中所有目的應用進程標識的第二對應關系,確定目的應用進程標識;根 據目的應用進程標識與消息隊列標識的第一對應關系,確定該組播組中所有目 的應用進程標識對應的消息隊列標識;4艮據所述消息隊列標識將該消息分別發 送到消息通信管理進程單元中創建的對應的消息隊列中。
4、 根據權利要求1所述的裝置,其特征在于,所述第一消息通信管理單 元,用于當所述目的應用進程信息為廣播標識時,將該消息分別發送給所有應 用進程的消息隊列中。
5、 根據權利要求1所述的裝置,其特征在于,該裝置還包括 存儲單元,用于保存對應用進程的消息進行管理的進程數據信息。
6、 根椐權利要求5所述的裝置,其特征在于,所述存儲單元為內存,所 述內存包括共享內存數據區頭、進程數據區和消息通信管理單元數據區,所述共享內存數據區頭用于記錄相關管理數據頭的地址,所述進程數據區用于記錄需要^f吏用的相關管理數據的地址;所述消息通信管理單元數據區用于記錄保存管理數據以及該管理數據所屬進程的數據地址;所述第一消息通信管理單元或第二消息通信管理單元,還進一步包括 消息管理單元,用于記錄所述內存中所保存的應用進程的進程數據的地址,根據該地址從所述內存中獲得對應的進程數據,再根據獲得的進程數據進行管理。
7、 根據權利要求5所述的裝置,其特征在于,所述消息通信管理進程單 元還包括消息通信增加單元,用于對存儲單元中的數據信息進行增加操作; 消息通信修改單元,用于對存儲單元中的數據信息進行修改操作; 消息通信刪除單元,用于對存儲單元中的數據信息進行刪除操作。
8、 一種實現消息通信的方法,其特征在于,該方法包括以下步驟A. 根據源應用進程指定的目的應用進程信息,將來自源應用進程的消息 發送至預先為該目的應用進程創建的消息隊列中;B. 從所述消息隊列中取出消息,并將該消息發送給目標應用進程。
9、 根據權利要求8所述的方法,其特征在于,所述源應用進程指定的目 的應用進程信息為目的應用進程標識,或為組播組標識,或為廣播標識。
10、 根據權利要求8所述的方法,其特征在于,當目的應用進程信息包括 目的應用進程標識時,步驟A包括才艮據預先保存的目的應用進程標識與消息隊列標識的第一對應關系,確定 所述目的應用進程標識對應的消息隊列標識;才艮據所述消息隊列標識將該消息 發送給對應的消息隊列中。
11、 根據權利要求8所述的方法,其特征在于,當目的應用進程信息包括組播組標識時,則步驟A包括對應關系,確定該組播組內所有目的應用進程標識;根據預先保存的目的應用 進程標識與消息隊列標識的第一對應關系,確定該組播組內每個目的應用進程 標識對應的消息隊列標識;根據消息隊列標識將該消息發送給對應的消息隊列 中。
12、 根據權利要求8所述的方法,其特征在于,當源應用進程指定的目的 應用進程信息為廣播標識時,則步驟A包括將該消息發送給所有應用進程的消息隊列中。
13、 根據權利要求8所述的方法,其特征在于,預先保存管理數據信息, 則該方法進一步包括C.利用所述管理數據信息,對該消息進行消息管理。
14、 根據權利要求13所述的方法,其特征在于,步驟C中管理數據信息 保存在內存中,所述內存包括共享內存數據區頭、進程數據區、消息通信管 理單元數據區,分別存儲消息管理相關管理數據頭的地址、需要^吏用的相關管 理數據的地址、保存管理數據以及該管理數據所屬進程的數據地址。
全文摘要
本發明公開了一種實現消息通信的裝置,該裝置包括消息通信管理進程單元、第一消息通信管理單元以及第二消息通信管理單元,每個消息通信管理單元對應一個應用進程;其中,第一消息通信管理單元,用于根據源應用進程指定的目的應用進程信息,將來自源應用進程的消息發送到消息通信管理進程單元中創建的對應目的應用進程的消息隊列中;第二消息通信管理單元,用于從消息通信管理進程單元中目的應用進程的消息隊列中取出消息發送給對應的目的應用進程;消息通信管理進程單元,用于為目標應用進程創建并管理消息隊列。同時,本發明還提供了一種實現消息通信的方法。本發明在實現消息通信時,可以屏蔽不同操作系統的消息通信功能的差異,結構簡單。
文檔編號G06F9/54GK101174225SQ20061015049
公開日2008年5月7日 申請日期2006年11月2日 優先權日2006年11月2日
發明者嚴海峰, 元 南, 坤 張, 湯智龍, 裘洪國, 瑞 趙, 芬 靳, 俊 饒 申請人:華為技術有限公司