一種Linux下的自適應(yīng)組件間通信方法
【專利摘要】本發(fā)明涉及分布式環(huán)境下網(wǎng)絡(luò)通信【技術(shù)領(lǐng)域】,特別是一種Linux下的自適應(yīng)組件間通信方法。本發(fā)明通過通信主機上的服務(wù)程序建立兩兩之間的單向長連接;在分布式組件啟動后,形成一個組件的地址列表;通信時,消息被封裝成JSON格式,根據(jù)地址列表查找到地址,根據(jù)位置關(guān)系通過Linux的本地socket直接發(fā)或建立的單向長連接發(fā)送到目標組件;組件停止時,從組件地址列表中刪除此組件的信息。本發(fā)明解決了在組件通信頻繁、通信量大的分布式環(huán)境下通信效率低、開銷大、實時性低的問題,可應(yīng)用于分布式應(yīng)用中各個組件之間的通信上。
【專利說明】—種Linux下的自適應(yīng)組件間通信方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及分布式環(huán)境下網(wǎng)絡(luò)通信【技術(shù)領(lǐng)域】,特別是一種Linux下的自適應(yīng)組件間通信方法。
【背景技術(shù)】
[0002]在分布式環(huán)境下,特別是在云計算的環(huán)境下,由于網(wǎng)絡(luò)上需要通信的組件非常多,通信數(shù)據(jù)量大,因此如何減少網(wǎng)絡(luò)開銷,增強通信的實時性就顯得尤為重要。由于WebService協(xié)議具有使用方便的優(yōu)勢,http協(xié)議具有可以穿透防火墻優(yōu)勢,因此,分布式通信中經(jīng)常采用Web Service on http的模式進行組件間的通信,然而,在通信頻繁、通信數(shù)據(jù)量大的情況下,使用這種方式會帶來以下的問題:
[0003]—是消息的冗余大,Web Service采用的XML消息格式,通信時消息的真實載荷比較小,這就表示,傳遞同樣信息量,Web Service承載信息的所需要消息量比較大,在帶寬一定的條件下,通信的實時性會打折扣;
[0004]二是系統(tǒng)開銷大,http的“請求里響應(yīng)”模式每次都會新建和銷毀連接,給操作系統(tǒng)帶來較大的開銷,在組件間通信比較頻繁的情況下,這會嚴重影響操作系統(tǒng)的性能,進而影響整個分布式應(yīng)用的性能,降低通信的實時性;
[0005]三是使用方式不夠靈活,由于http協(xié)議規(guī)定只能由客戶端向服務(wù)器發(fā)起連接進行通信,不能反過來,因此如果需要雙方都能發(fā)起通信,需要在通信的雙方都擁有服務(wù)器和客戶端的程序。
【發(fā)明內(nèi)容】
[0006]本發(fā)明解決的技術(shù)問題在于提供一種Linux下的自適應(yīng)組件間通信方法,解決了在組件通信頻繁、通信量大的分布式環(huán)境下通信效率低、開銷大、實時性低的問題。
[0007]本發(fā)明解決上述技術(shù)問題的技術(shù)方案是:
[0008]包括如下步驟:
[0009]步驟1:在通信主機上開發(fā)一個服務(wù)程序,此主機上的分布式組件全部調(diào)用此服務(wù)進行通信;
[0010]步驟2:需要通信的主機由服務(wù)程序兩兩之間建立單向長連接;
[0011]步驟3:主機上的分布式組件啟動以后,向服務(wù)程序發(fā)送一個啟動的消息,服務(wù)程序通過所有的單向長連接向其他主機的服務(wù)程序發(fā)送這個啟動的消息,并且接收其他服務(wù)程序發(fā)送過來的啟動消息,從而形成一個組件的地址列表;
[0012]步驟4:分布式組件需要向其他組件發(fā)送消息時,服務(wù)程序先把消息封裝成JSON格式,并向服務(wù)程序提供目標組件的名稱;
[0013]步驟5:服務(wù)程序從維護的組件地址列表中根據(jù)目標組件的名稱查找到組件的地址,如果組件是在同一臺主機上,貝丨』通過Linux的本地socket直接發(fā)到目標組件;如果組件是在另外一臺主機上,則通過此主機與另外一臺主機建立的單向長連接發(fā)送到另外一臺主機上,再由另外一臺主機的服務(wù)程序?qū)⑾l(fā)送到目標組件上;
[0014]步驟6:主機上的組件停止時,向服務(wù)程序發(fā)送一個停止的消息,服務(wù)程序通過所有的單向長連接向其他主機上的服務(wù)程序發(fā)送這個停止消息,并且從組件地址列表中刪除此組件的信息,其他主機上的服務(wù)程序也從組件地址列表中刪除此組件的信息。
[0015]所述的分布式組件是一個獨立運行的進程,通過與其他分布式組件交換消息來獲取輸入并將輸出發(fā)送到其他分布式組件上;
[0016]所述的服務(wù)程序是Linux的一個自啟動的服務(wù)進程;
[0017]所述的分布式組件和服務(wù)程序都在同一臺主機上,分布式組件與服務(wù)程序之間使用Linux的管道方式進行通信。
[0018]所述的組件的地址列表中的項目包括組件的名稱和組件所在主機的地址。
[0019]所述的自適應(yīng)表示的是服務(wù)程序的自適應(yīng),會根據(jù)目標組件的地址自動選擇是從本地socket還是從單向長連接發(fā)送消息。
[0020]所述的JSON消息格式如下: [0021]
【權(quán)利要求】
1.一種Linux下的自適應(yīng)組件間通信方法,其特征在于: 包括如下步驟: 步驟1:在通信主機上開發(fā)一個服務(wù)程序,此主機上的分布式組件全部調(diào)用此服務(wù)進行通信; 步驟2:需要通信的主機由服務(wù)程序兩兩之間建立單向長連接; 步驟3:主機上的分布式組件啟動以后,向服務(wù)程序發(fā)送一個啟動的消息,服務(wù)程序通過所有的單向長連接向其他主機的服務(wù)程序發(fā)送這個啟動的消息,并且接收其他服務(wù)程序發(fā)送過來的啟動消息,從而形成一個組件的地址列表; 步驟4:分布式組件需要向其他組件發(fā)送消息時,服務(wù)程序先把消息封裝成JSON格式,并向服務(wù)程序提供目標組件的名稱; 步驟5:服務(wù)程序從維護的組件地址列表中根據(jù)目標組件的名稱查找到組件的地址,如果組件是在同一臺主機上,貝1J通過Linux的本地socket直接發(fā)到目標組件;如果組件是在另外一臺主機上,則通過此主機與另外一臺主機建立的單向長連接發(fā)送到另外一臺主機上,再由另外一臺主機的服務(wù)程序?qū)⑾l(fā)送到目標組件上; 步驟6:主機上的組件停止時,向服務(wù)程序發(fā)送一個停止的消息,服務(wù)程序通過所有的單向長連接向其他主機上的服務(wù)程序發(fā)送這個停止消息,并且從組件地址列表中刪除此組件的信息,其他主機上的服務(wù)程序也從組件地址列表中刪除此組件的信息。
2.根據(jù)權(quán)利要求1所述的自適應(yīng)組件間通信方法,其特征在于:所述的分布式組件是一個獨立運行的進程,通過與其他分布式組件交換消息來獲取輸入并將輸出發(fā)送到其他分布式組件上;` 所述的服務(wù)程序是Linux的一個自啟動的服務(wù)進程; 所述的分布式組件和服務(wù)程序都在同一臺主機上,分布式組件與服務(wù)程序之間使用Linux的管道方式進行通信。
3.根據(jù)權(quán)利要求1所述的自適應(yīng)組件間通信方法,其特征在于:所述的組件的地址列表中的項目包括組件的名稱和組件所在主機的地址。
4.根據(jù)權(quán)利要求2所述的自適應(yīng)組件間通信方法,其特征在于:所述的組件的地址列表中的項目包括組件的名稱和組件所在主機的地址。
5.根據(jù)權(quán)利要求1至4任一項所述的自適應(yīng)組件間通信方法,其特征在于:所述的自適應(yīng)表示的是服務(wù)程序的自適應(yīng),會根據(jù)目標組件的地址自動選擇是從本地socket還是從單向長連接發(fā)送消息。
6.根據(jù)權(quán)利要求1至4任一項所述的自適應(yīng)組件間通信方法,其特征在于:所述的JSON消息格式如下:
7.根據(jù)權(quán)利要求5所述的自適應(yīng)組件間通信方法,其特征在于:所述的JSON消息格式如下:
【文檔編號】G06F9/44GK103699450SQ201310714380
【公開日】2014年4月2日 申請日期:2013年12月20日 優(yōu)先權(quán)日:2013年12月20日
【發(fā)明者】莫展鵬, 楊松, 季統(tǒng)凱 申請人:國云科技股份有限公司