一種跨平臺通信系統(tǒng)及方法
【專利摘要】本發(fā)明提供一種跨平臺進程通信系統(tǒng)及方法,通過在第二進程平臺的管理進程下建立轉(zhuǎn)發(fā)進程,所述轉(zhuǎn)發(fā)進程用于在監(jiān)聽到所述第一進程平臺的通信進程的連接請求時,接收所述通信進程發(fā)來的消息并解析所述消息類型,并根據(jù)所述消息類型查找出對應(yīng)的被管理進程作為目標進程來接收所述消息;利用建立中間轉(zhuǎn)發(fā)進程的方式來實現(xiàn)兩個跨平臺進程之間的通信,通用性強,同樣可以使用到所述通信進程、管理進程及被管理進程任何一個進程通信,而不需要任何其他進程的建立,大大提高了代碼維護的程度,且轉(zhuǎn)發(fā)進程的方法可以保護跨平臺中的進程結(jié)構(gòu)不做改變。
【專利說明】一種跨平臺通信系統(tǒng)及方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及通信技術(shù),特別是涉及一種跨平臺通信系統(tǒng)及方法。
【背景技術(shù)】
[0002]一股來說,嵌入式設(shè)備通常采用LINUX作為操作系統(tǒng),該系統(tǒng)提供各個功能模塊進程之間及線程之間的通信,如何在LINUX環(huán)境下實現(xiàn)準確且高效的進程通信方式成為研發(fā)中的重點所在。
[0003]LINUX用于進程間通信有多種方法,其中常用的方式是管道(pipe)、有名管道(FIFO),信號(signal),消息隊列、共享內(nèi)存、信號量(semaphore)、套接口 (socket)等。目前LINUX環(huán)境下的跨平臺通信可以采用以下的通信方式:A進程模塊調(diào)用msgget函數(shù)創(chuàng)建一個新的消息隊列,并用msgsnd函數(shù)將消息添加到消息隊列的隊尾。在B進程模塊調(diào)用msgrcv函數(shù)來接收A進程發(fā)來的消息。但是這樣存在著兩個嚴重的問題:
[0004]但是這種方式存在著兩個問題:
[0005](I)改變了兩個進程的進程結(jié)構(gòu),導(dǎo)致進程維護非常困難
[0006](2)通用性不強。如果A進程想與Q管理中的其他進程D進程相互通信,必須還要在D進程模塊處用msgrcv函數(shù)從消息隊列中讀取出A進程的消息。
[0007]由此可見,采用上述方法不僅破壞了兩個不同平臺的進程架構(gòu),而且工作量重復(fù),代碼維護不方便,不能達到理想效果。
【發(fā)明內(nèi)容】
[0008]鑒于以上所述現(xiàn)有技術(shù)的缺點,本發(fā)明的目的在于提供一種跨平臺通信系統(tǒng)及方法,解決上述現(xiàn)有技術(shù)中跨平臺通信的問題。
[0009]為實現(xiàn)上述目標及其他相關(guān)目標,本發(fā)明提供一種跨平臺進程通信系統(tǒng),用于實現(xiàn)與建立有通信進程的第一進程平臺的通信,所述系統(tǒng)包括:第二進程平臺,建立有管理進程;所述管理進程可通信地連接于多個被管理進程,其中,所述管理進程還建立有轉(zhuǎn)發(fā)進程;所述轉(zhuǎn)發(fā)進程用于在監(jiān)聽到所述第一進程平臺的通信進程的連接請求時,接收所述通信進程發(fā)來的消息并解析所述消息類型,并根據(jù)所述消息類型查找出對應(yīng)的被管理進程作為目標進程來接收所述消息。
[0010]優(yōu)選的,所述通信進程預(yù)置有預(yù)設(shè)數(shù)據(jù)格式的第一數(shù)據(jù)緩沖區(qū)為消息隊列供寫入消息類型和內(nèi)容,進而發(fā)出所述消息;所述轉(zhuǎn)發(fā)進程預(yù)置有所述預(yù)設(shè)數(shù)據(jù)格式的第二數(shù)據(jù)緩沖區(qū)以讀取所述通信進程發(fā)來的消息。
[0011]優(yōu)選的,所述第一進程平臺及第二進程平臺是在Linux環(huán)境下,所述預(yù)設(shè)數(shù)據(jù)格式為msgbuf數(shù)據(jù)結(jié)構(gòu)。
[0012]優(yōu)選的,所述多個被管理進程與所述管理進程位于不同的平臺。
[0013]優(yōu)選的,所述轉(zhuǎn)發(fā)進程通過調(diào)用目標進程所在平臺的預(yù)設(shè)進程通信接口函數(shù)以將消息發(fā)送至所述目標進程。[0014]為實現(xiàn)上述目標及其他相關(guān)目標,本發(fā)明提供一種跨平臺進程通信方法,用于實現(xiàn)與建立有通信進程的第一進程平臺的通信,所述方法包括:在第二進程平臺建立管理進程,其中,所述管理進程可通信地連接于多個被管理進程;在所述管理進程建立轉(zhuǎn)發(fā)進程,所述轉(zhuǎn)發(fā)進程用于在監(jiān)聽到所述第一進程平臺的通信進程的連接請求時,接收所述通信進程發(fā)來的消息并解析所述消息類型,并根據(jù)所述消息類型查找出對應(yīng)的被管理進程作為目標進程來接收所述消息。
[0015]優(yōu)選的,所述通信進程預(yù)置有預(yù)設(shè)數(shù)據(jù)格式的第一數(shù)據(jù)緩沖區(qū)為消息隊列供寫入消息類型和內(nèi)容,進而發(fā)出所述消息;所述轉(zhuǎn)發(fā)進程預(yù)置有所述預(yù)設(shè)數(shù)據(jù)格式的第二數(shù)據(jù)緩沖區(qū)以讀取所述通信進程發(fā)來的消息。
[0016]優(yōu)選的,所述第一進程平臺及第二進程平臺是在Linux環(huán)境下,所述預(yù)設(shè)數(shù)據(jù)格式為msgbuf數(shù)據(jù)結(jié)構(gòu)。
[0017]優(yōu)選的,所述多個被管理進程與所述管理進程位于不同的平臺。
[0018]優(yōu)選的,所述轉(zhuǎn)發(fā)進程通過調(diào)用目標進程所在平臺的預(yù)設(shè)進程通信接口函數(shù)以將消息發(fā)送至所述目標進程。 [0019]如上所述,本發(fā)明提供一種跨平臺進程通信系統(tǒng)及方法,通過在第二進程平臺的管理進程下建立轉(zhuǎn)發(fā)進程,所述轉(zhuǎn)發(fā)進程用于在監(jiān)聽到所述第一進程平臺的通信進程的連接請求時,接收所述通信進程發(fā)來的消息并解析所述消息類型,并根據(jù)所述消息類型查找出對應(yīng)的被管理進程作為目標進程來接收所述消息;利用建立中間轉(zhuǎn)發(fā)進程的方式來實現(xiàn)兩個跨平臺進程之間的通信,通用性強,同樣可以使用到所述通信進程、管理進程及被管理進程任何一個進程通信,而不需要任何其他進程的建立,大大提高了代碼維護的程度,且轉(zhuǎn)發(fā)進程的方法可以保護跨平臺中的進程結(jié)構(gòu)不做改變。
【專利附圖】
【附圖說明】
[0020]圖1顯示為本發(fā)明的跨平臺進程通信系統(tǒng)的一實施例的結(jié)構(gòu)示意圖。
[0021]圖2顯示為本發(fā)明的跨平臺進程通信方法的一實施例的流程示意圖。
[0022]元件標號說明
[0023]I第一進程平臺
[0024]11通信進程
[0025]2第二進程平臺
[0026]21管理進程
[0027]22被管理進程
[0028]23轉(zhuǎn)發(fā)進程
[0029]SI~S2方法步驟
【具體實施方式】
[0030]以下通過特定的具體實例說明本發(fā)明的實施方式,本領(lǐng)域技術(shù)人員可由本說明書所揭露的內(nèi)容輕易地了解本發(fā)明的其他優(yōu)點與功效。本發(fā)明還可以通過另外不同的【具體實施方式】加以實施或應(yīng)用,本說明書中的各項細節(jié)也可以基于不同觀點與應(yīng)用,在沒有背離本發(fā)明的精神下進行各種修飾或改變。需說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互組合。
[0031]如圖1所示,本發(fā)明提供一種跨平臺進程通信系統(tǒng),用于與建立有通信進程11的第一進程平臺I間通信,所述系統(tǒng)包括:第二進程平臺2,建立有管理進程21 ;所述管理進程21可通信地連接于多個被管理進程22,其中,所述管理進程21還建立有轉(zhuǎn)發(fā)進程23 ;所述轉(zhuǎn)發(fā)進程23用于在監(jiān)聽到所述第一進程平臺I的通信進程11的連接請求時,接收所述通信進程11發(fā)來的消息并解析所述消息類型,并根據(jù)所述消息類型查找出對應(yīng)的被管理進程22作為目標進程來接收所述消息。
[0032]具體來說,本發(fā)明可以用于嵌入式設(shè)備,嵌入式設(shè)備常用的如LINUX系統(tǒng),而移動終端如手機或者平臺電腦中也是有很大一部分使用基于LINUX系統(tǒng)所開發(fā)的安卓(Android)系統(tǒng);LINUX用于進程間通信有多種方法,其中常用的方式是管道(pipe)、有名管道(FIFO),信號(signal),消息隊列、共享內(nèi)存、信號量(semaphore)、套接口(socket)
坐寸ο
[0033]在一實施例中,所述第一進程平臺I和第二進程平臺2均可以是LINUX環(huán)境下的相互獨立的進程平臺,所謂進程就是代表某個應(yīng)用程序進行工作的任務(wù),而所述通信進程11預(yù)置有預(yù)設(shè)數(shù)據(jù)格式的第一數(shù)據(jù)緩沖區(qū)作為消息隊列供寫入消息類型和內(nèi)容,進而發(fā)出所述消息;所述轉(zhuǎn)發(fā)進程23預(yù)置有所述預(yù)設(shè)數(shù)據(jù)格式的第二數(shù)據(jù)緩沖區(qū)以讀取所述通信進程11發(fā)來的消息。 [0034]在一實施例中,所述預(yù)設(shè)數(shù)據(jù)格式例如為LINUX環(huán)境下msgbuf?數(shù)據(jù)結(jié)構(gòu);而所述通信進程11可以通過msgsnd函數(shù)來發(fā)送消息,其代碼實現(xiàn)例如為:
[0035]
key」key;
key=rtok(".",0xFF);
if((g_msgid=msggcl(kcy,IPC_CREAT|0666))<0)
{
pcrror("msggcr error");
cxil(0);
}
msg.msgTypc = MSGTYPEl;
msgsnd(g_msgid,&msg,sizcof(msg),0);
mush(stdoul);
[0036]相應(yīng)的,在被管理進程22的管理進程21下建立一個新的轉(zhuǎn)發(fā)進程23,轉(zhuǎn)發(fā)進程23的應(yīng)用程序通過注冊一個事件,所述管理進程21為轉(zhuǎn)發(fā)進程23分配了一個進程標志號,該進程標志號作為轉(zhuǎn)發(fā)進程23與其他進程通信的一個src_id.轉(zhuǎn)發(fā)進程23通過監(jiān)聽是否有通信進程11的連接請求,所述轉(zhuǎn)發(fā)進程23和其他被管理進程22的區(qū)別在于其可具有管理進程22的部分或全部管理權(quán)限;在這里首先分配msgbuf數(shù)據(jù)結(jié)構(gòu)的第二緩沖區(qū),如果監(jiān)聽消息存在,則通過msgrcv函數(shù)對所述第一進程平臺I的通信進程11發(fā)過來的消息進行讀取到第二緩沖區(qū),也就是說,轉(zhuǎn)發(fā)進程23對所述消息的讀取是在通信進程11的消息隊列中讀取的;而如果不存在的話,就重復(fù)監(jiān)聽。[0037]所述轉(zhuǎn)發(fā)進程23通過對通信進程11發(fā)來的消息結(jié)構(gòu)體進行解析,來確定消息類型即msgtype的內(nèi)容,并用此內(nèi)容進行消息填充,src_id設(shè)為管理分配的進程標志號,dst_id設(shè)為所述被管理進程22中的目標進程的進程標志號。最后轉(zhuǎn)發(fā)進程23調(diào)用被管理進程22所在平臺提供的進程通信接口函數(shù)將消息發(fā)送給被管理進程22。
[0038]因此,若所述多個被管理進程22與所述管理進程21位于不同的平臺,則所述轉(zhuǎn)發(fā)進程23可通過調(diào)用目標進程所在平臺的預(yù)設(shè)進程通信接口函數(shù)以將消息發(fā)送至所述目標進程;當然若在同一平臺亦可,并非以圖1所示為限。
[0039]如圖2所示,本發(fā)明提供一種跨平臺進程通信方法,用于實現(xiàn)與建立有通信進程的第一進程平臺的通信,所述方法包括:
[0040]步驟S1:在第二進程平臺建立管理進程,其中,所述管理進程可通信地連接于多個被管理進程;
[0041]步驟S2:在所述管理進程建立轉(zhuǎn)發(fā)進程,所述轉(zhuǎn)發(fā)進程用于在監(jiān)聽到所述第一進程平臺的通信進程的連接請求時,接收所述通信進程發(fā)來的消息并解析所述消息類型,并根據(jù)所述消息類型查找出對應(yīng)的被管理進程作為目標進程來接收所述消息。
[0042]具體來說,本發(fā)明可以用于嵌入式設(shè)備,嵌入式設(shè)備常用的如LINUX系統(tǒng),而移動終端如手機或者平臺電腦中也是有很大一部分使用基于LINUX系統(tǒng)所開發(fā)的安卓(Android)系統(tǒng);LINUX用于進程間通信有多種方法,其中常用的方式是管道(pipe)、有名管道(FIFO)、信號(signal)、消息隊列、共享內(nèi)存、信號量(semaphore)、套接口(socket)等。[0043]在一實施例中,所述第一進程平臺和第二進程平臺均可以是LINUX環(huán)境下的相互獨立的進程平臺,所謂進程就是代表某個應(yīng)用程序進行工作的任務(wù),而所述通信進程預(yù)置有預(yù)設(shè)數(shù)據(jù)格式的第一數(shù)據(jù)緩沖區(qū)作為消息隊列供寫入消息類型和內(nèi)容,進而發(fā)出所述消息;所述轉(zhuǎn)發(fā)進程預(yù)置有所述預(yù)設(shè)數(shù)據(jù)格式的第二數(shù)據(jù)緩沖區(qū)以讀取所述通信進程發(fā)來的消息。
[0044]在一實施例中,所述預(yù)設(shè)數(shù)據(jù)格式例如為LINUX環(huán)境下msgbuf?數(shù)據(jù)結(jié)構(gòu);而所述通信進程可以通過msgsnd函數(shù)來發(fā)送消息,其代碼實現(xiàn)例如為:
[0045]
【權(quán)利要求】
1.一種跨平臺進程通信系統(tǒng),其特征在于,用于實現(xiàn)與建立有通信進程的第一進程平臺的通信,所述系統(tǒng)包括: 第二進程平臺,建立有管理進程;所述管理進程可通信地連接于多個被管理進程,其中,所述管理進程還建立有轉(zhuǎn)發(fā)進程;所述轉(zhuǎn)發(fā)進程用于在監(jiān)聽到所述第一進程平臺的通信進程的連接請求時,接收所述通信進程發(fā)來的消息并解析所述消息類型,并根據(jù)所述消息類型查找出對應(yīng)的被管理進程作為目標進程來接收所述消息。
2.根據(jù)權(quán)利要求1所述的跨平臺進程通信系統(tǒng),其特征在于,所述通信進程預(yù)置有預(yù)設(shè)數(shù)據(jù)格式的第一數(shù)據(jù)緩沖區(qū)為消息隊列供寫入消息類型和內(nèi)容,進而發(fā)出所述消息;所述轉(zhuǎn)發(fā)進程預(yù)置有所述預(yù)設(shè)數(shù)據(jù)格式的第二數(shù)據(jù)緩沖區(qū)以讀取所述通信進程發(fā)來的消息。
3.根據(jù)權(quán)利要求2所述的跨平臺進程通信系統(tǒng),其特征在于,所述第一進程平臺及第二進程平臺是在Linux環(huán)境下,所述預(yù)設(shè)數(shù)據(jù)格式為msgbuf數(shù)據(jù)結(jié)構(gòu)。
4.根據(jù)權(quán)利要求1所述的跨平臺進程通信系統(tǒng),其特征在于,所述多個被管理進程與所述管理進程位于不同的平臺。
5.根據(jù)權(quán)利要求4所述的跨平臺進程通信系統(tǒng),其特征在于,所述轉(zhuǎn)發(fā)進程通過調(diào)用目標進程所在平臺的預(yù)設(shè)進程通信接口函數(shù)以將消息發(fā)送至所述目標進程。
6.一種跨平臺進程通信方法,其特征在于,用于實現(xiàn)與建立有通信進程的第一進程平臺的通信,所述方法包括: 在第二進程平臺建立管理進程,其中,所述管理進程可通信地連接于多個被管理進程; 在所述管理進程建立轉(zhuǎn)發(fā)進程,所述轉(zhuǎn)發(fā)進程用于在監(jiān)聽到所述第一進程平臺的通信進程的連接請求時,接收所述通信進程發(fā)來的消息并解析所述消息類型,并根據(jù)所述消息類型查找出對應(yīng)的被管理進程作為目標進程來接收所述消息。
7.根據(jù)權(quán)利要求6所述的跨平臺進程通信方法,其特征在于,所述通信進程預(yù)置有預(yù)設(shè)數(shù)據(jù)格式的第一數(shù)據(jù)緩沖區(qū)為消息隊列供寫入消息類型和內(nèi)容,進而發(fā)出所述消息;所述轉(zhuǎn)發(fā)進程預(yù)置有所述預(yù)設(shè)數(shù)據(jù)格式的第二數(shù)據(jù)緩沖區(qū)以讀取所述通信進程發(fā)來的消息。
8.根據(jù)權(quán)利要求7所述的跨平臺進程通信方法,其特征在于,所述第一進程平臺及第二進程平臺是在Linux環(huán)境下,所述預(yù)設(shè)數(shù)據(jù)格式為msgbuf數(shù)據(jù)結(jié)構(gòu)。
9.根據(jù)權(quán)利要求6所述的跨平臺進程通信方法,其特征在于,所述多個被管理進程與所述管理進程位于不同的平臺。
10.根據(jù)權(quán)利要求9所述的跨平臺進程通信方法,其特征在于,所述轉(zhuǎn)發(fā)進程通過調(diào)用目標進程所在平臺的預(yù)設(shè)進程通信接口函數(shù)以將消息發(fā)送至所述目標進程。
【文檔編號】G06F9/54GK103995751SQ201410238806
【公開日】2014年8月20日 申請日期:2014年5月30日 優(yōu)先權(quán)日:2014年5月30日
【發(fā)明者】于慧霞 申請人:上海斐訊數(shù)據(jù)通信技術(shù)有限公司