異步通信模式下socket通信與進程管理通用平臺及方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及異步通信模式下SOCKET通信與進程管理通用平臺及方法。
【背景技術(shù)】
[0002]在TCP/IP網(wǎng)絡(luò)層次模型中,SOCKET是應(yīng)用層與傳輸層之間的一個軟件抽象層,是諸多網(wǎng)絡(luò)通信編程技術(shù)的基礎(chǔ),應(yīng)用廣泛,具有低成本、低資源消耗、跨平臺等特點而備受青睞。
[0003]但是SOCKET編程有其技術(shù)門檻,編寫穩(wěn)健的SOCKET通信程序需要了解其技術(shù)特點,規(guī)避特有的技術(shù)風險,融合相關(guān)的進程、內(nèi)存、信號、鎖等管理技術(shù),需要一定的技術(shù)功底。
[0004]為簡化SOCKET編程,提高編程效率,業(yè)界提供了一些開源的C/C++網(wǎng)絡(luò)開發(fā)庫,如ACE、Boost 的 AS10、libevent。
[0005]ACE是一個大型的中間件產(chǎn)品,過于龐大,SOCKET通信只是其龐大功能集合中的功能之一,學習門檻很高。
[0006]AS10是一個C++版本的異步10庫,封裝了 SOCKET的常用操作,依賴Boost,要求開發(fā)人員熟悉C++、Boost,支持多線程并發(fā)處理,但是需要開發(fā)人員自行創(chuàng)建與管理線程并考慮線程安全。
[0007]libevent是對10多路復(fù)用技術(shù)的進一步封裝,采用事件驅(qū)動的運行機制,本身不包含進程或線程的管理,另外需要開發(fā)人員自行創(chuàng)建并管理SOCKET描述符。
[0008]上述三個開發(fā)庫都不適合簡單通用的網(wǎng)絡(luò)程序開發(fā)場景:在單位內(nèi)部或外部,需要開發(fā)部署網(wǎng)絡(luò)通信程序進行數(shù)據(jù)交換,采用自行約定的通信協(xié)議,而開發(fā)人員水平一般,不熟悉SOCKET通信機制、進程管理、信號、鎖等編程技術(shù),此時快速開發(fā)部署穩(wěn)健的通信程序比較困難。
[0009]在請求密集場景中,通常采用異步通信模式,允許客戶端批量發(fā)送一批請求,在上一個請求處理完成之前,客戶端可以發(fā)送新的請求,從而提升交易請求吞吐量,服務(wù)端的應(yīng)答返回時客戶端根據(jù)應(yīng)答結(jié)果中的消息標識關(guān)聯(lián)自己的請求消息,辨識應(yīng)答結(jié)果的歸屬。業(yè)界缺乏類似的開發(fā)庫。
【發(fā)明內(nèi)容】
[0010]為解決現(xiàn)有技術(shù)存在的不足,本發(fā)明公開了異步通信模式下SOCKET通信與進程管理通用平臺及方法,融合SOCKET通信與進程管理功能,開發(fā)人員用以快速開發(fā)部署網(wǎng)絡(luò)通信程序,無需關(guān)心SOCKET通信與進程管理等技術(shù)細節(jié),專注于業(yè)務(wù)邏輯的實現(xiàn),提高開發(fā)效率并降低開發(fā)門檻;對于網(wǎng)絡(luò)服務(wù)程序,可以通過配置參數(shù)指定服務(wù)進程的數(shù)目,實現(xiàn)處理能力的靈活擴展;采用多個進程而不是線程并發(fā)運行,開發(fā)人員無需考慮線程安全,進一步降低開發(fā)門檻;平臺運行內(nèi)置診斷模塊,實時監(jiān)控整個平臺的繁忙比率,達到設(shè)定閾值時在線增減服務(wù)進程的數(shù)目,實現(xiàn)處理能力的動態(tài)擴展;實時監(jiān)控平臺的運行狀況,對于異常終止或僵死的服務(wù)進程自動予以重啟,確保整個平臺穩(wěn)定持續(xù)運行;另外包含一個直觀簡易的運行監(jiān)視界面,可以實時查看平臺全局信息與服務(wù)進程的處理狀態(tài)。
[0011]支持異步通信模式,允許客戶端批量發(fā)送一批請求,在上一個請求處理完成之前,客戶端可以發(fā)送新的請求,從而提升交易請求吞吐量,服務(wù)端的應(yīng)答返回時客戶端根據(jù)應(yīng)答結(jié)果中的消息標識關(guān)聯(lián)自己的請求消息,辨識應(yīng)答結(jié)果的歸屬。
[0012]為實現(xiàn)上述目的,本發(fā)明的具體方案如下:
[0013]SOCKET通信與進程管理通用平臺發(fā)布為一個靜態(tài)庫文件,附帶一組頭文件、配套資料及代碼樣例,提供編程接口供開發(fā)人員編程調(diào)用,支持各種類UNIX操作系統(tǒng),支持C/C++開發(fā)語言。
[0014]與客戶端的通信協(xié)議支持TCP、UDP,采用異步通信模式。
[0015]TCP (Transmiss1n Control Protocol,傳輸控制協(xié)議)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議;UDP(User Datagram Protocol,用戶數(shù)據(jù)報協(xié)議),是一種無連接的傳輸層協(xié)議,提供面向事務(wù)的簡單不可靠信息傳送服務(wù)。
[0016]異步通信模式時,允許客戶端批量發(fā)送一批請求,在上一個請求處理完成之前,客戶端可以發(fā)送新的請求,從而提升交易請求吞吐量,服務(wù)端的應(yīng)答返回時客戶端根據(jù)應(yīng)答結(jié)果中的消息標識關(guān)聯(lián)自己的請求消息,辨識應(yīng)答結(jié)果的歸屬;
[0017]異步通信模式下SOCKET通信與進程管理通用方法,包括以下步驟:
[0018]異步通信模式場景中,完整功能的實現(xiàn)包含兩個平臺:一個異步通信平臺、一個業(yè)務(wù)處理平臺,兩者通過消息隊列與UNIX域SOCKET通信機制交換數(shù)據(jù),靈活擴展處理能力,提升交易吞吐量;
[0019]平臺運行前需要編碼實現(xiàn)業(yè)務(wù)邏輯,編譯生成最終的執(zhí)行程序并部署。兩個平臺需要分別編寫編譯,分別部署,協(xié)作完成客戶端請求處理;
[0020]通信平臺運行時創(chuàng)建一個平臺進程、一個診斷進程、一組通信進程,通信進程的數(shù)目由配置參數(shù)決定,平臺進程根據(jù)配置文件中的平臺關(guān)鍵字創(chuàng)建進程管理共享內(nèi)存、信號燈,創(chuàng)建一個SOCKET監(jiān)聽描述符、一個SOCKET管理描述符、一組描述符傳遞通道、一個空閑通道,對于UDP通信協(xié)議額外創(chuàng)建一個令牌通道;
[0021]業(yè)務(wù)處理平臺運行時創(chuàng)建一個平臺進程、一個診斷進程、一個分發(fā)進程、一組處理進程,平臺進程根據(jù)配置文件中的平臺關(guān)鍵字創(chuàng)建進程管理共享內(nèi)存、信號燈,創(chuàng)建一個SOCKET管理描述符;
[0022]異步通信平臺與業(yè)務(wù)處理平臺運行就緒之后,等待客戶端連接請求;
[0023]客戶端發(fā)起連接請求時,由通信平臺中的平臺進程接受連接請求,得到客戶端連接描述符,通過事先創(chuàng)建的描述符傳遞通道傳遞給某個空閑的通信進程,平臺進程關(guān)閉與客戶端的連接;
[0024]通信進程接管與客戶端的連接,讀取客戶端請求消息,綁定自己的進程序號后,放入請求隊列;
[0025]處理平臺中的分發(fā)進程從請求隊列中讀取請求,分發(fā)給某個空閑的處理進程,處理進程處理完成之后,連接請求消息中的進程序號對應(yīng)的通信進程,并發(fā)送應(yīng)答結(jié)果;
[0026]通信平臺中的通信進程轉(zhuǎn)發(fā)應(yīng)答結(jié)果給客戶端,從而應(yīng)答結(jié)果由接收該請求消息的通信進程返回。
[0027]進一步的,兩個平臺各自的進程管理共享內(nèi)存中包含平臺全局信息,如:平臺類型、服務(wù)進程數(shù)目、服務(wù)進程繁忙比率、平臺進程ID、診斷進程ID等,以及一組管理槽位,每個服務(wù)進程占用其中一個槽位,存放服務(wù)進程的私有信息,包括:進程ID、運行狀態(tài)、用戶ID、組ID、執(zhí)行時間、執(zhí)行時限等。
[0028]進一步的,一個通信進程可以搭配一組處理進程,通信進程專職通信,處理進程專職業(yè)務(wù)邏輯處理,兩者通過消息隊列與UNIX域SOCKET通信機制交換數(shù)據(jù)。
[0029]進一步的,通信平臺以SOCKET服務(wù)模式運行,處理平臺以常駐進程管理模式運行。SOCKET服務(wù)模式作為SOCKET服務(wù)與客戶端通信,通過配置參數(shù)指定服務(wù)進程的數(shù)目,實現(xiàn)處理能力的靈活擴展,具有自我診斷與實時運行監(jiān)視功能;常駐進程管理模式中,業(yè)務(wù)邏輯封裝為獨立的插件程序在平臺上運行,每個插件程序可以彼此不同,可以由不同的用戶執(zhí)行,可以單獨啟動或停止,在單個平臺中集中管理多個用戶的后臺散亂任務(wù),同樣具有自我診斷與實時運行監(jiān)視功能。
[0030]進一步的,在通信平臺中,客戶端請求到達之后由平臺進程接受,得到客戶端連接描述符,通過描述符傳遞通道發(fā)送給空閑的通信進程,通信進程創(chuàng)建一個UNIX域的監(jiān)聽SOCKET,作為與處理平臺中的處理進程交互的通道,之后通信進程通過10多路復(fù)用技術(shù)同時兼顧客戶端描述符、UNIX域監(jiān)聽SOCKET。
[0031]進一步的,在處理平臺中,處理進程讀取客戶端請求消息,處理業(yè)務(wù)邏輯,根據(jù)消息綁定的通信進程序號連接對應(yīng)的通信進程的UNIX域監(jiān)聽SOCKET并發(fā)送應(yīng)答結(jié)果,通信進程接受處理進程連接請求,得到處理進程連接描述符,之后通信進程的10多路復(fù)用操作將兼顧這個新的處理進程連接描述符,從中讀取處理進程應(yīng)答結(jié)果并轉(zhuǎn)發(fā)給客戶端。
[0032]進一步的,在處理平臺內(nèi)部,采用分發(fā)邏輯,平臺啟動時創(chuàng)建一個空閑通道與一組數(shù)據(jù)傳輸通道,再采用插件程序的方式運行一個分發(fā)進程與一組處理進程,處理進程啟動時在空閑通道中登記自己的進程編號,并等待讀取自己專屬的數(shù)據(jù)傳輸通道,分發(fā)進程從請求隊列中提取客戶端請求,從空閑通道中提取第一個空閑的處理進程編號,通過進程編號對應(yīng)的數(shù)據(jù)通道發(fā)送客戶端的請求數(shù)據(jù),對應(yīng)的處理進程接收并處理請求的業(yè)務(wù)邏輯,之后向請求數(shù)據(jù)對應(yīng)的通信進程發(fā)送應(yīng)