文/周麗麗 秦賀偉 趙時輪
隨著信息系統規模的不斷擴大,信息系統間實時數據共享的數據量也在不斷上升,繼而對支撐信息系統運行的通信服務性能也提出了更高的要求。
本文提出了面向實時數據流的高效通信服務系統,作為信息交換的底層系統軟件,支持大型復雜信息系統網絡層的數據交互,能在高并發網絡環境下提供實時、高效的數據轉發服務,能夠有效解決通信服務系統面臨的并發訪問鏈接數量大、數據交換信息流量大等實時處理的關鍵問題,對相關信息系統的開發具有一定的參考意義。
面向實時數據流的高效通信服務系統,在其實現形式上,是一個典型的CS軟件系統體系結構,由通信服務客戶端、通信服務端和管理端三部分組成,圖1給出了高效通信服務系統的主要組成。
通信服務客戶端部署于各應用系統,為其提供網絡通信能力。管理端是監控通信服務運行情況的管理程序。通信服務端的主要組成包括:
(1)邏輯管理層:由監控管理、主題管理和鏈接管理三個子模塊組成。監控管理模塊按照約定協議向管理端上報服務端狀態信息;主題管理負責域內客戶端的通信主題維護和通信主題匹配;鏈接管理用于維護服務端與客戶端之間的通信鏈接。
(2)數據管理層包括:由數據隊列管理、線程池管理和內存管理三個子模塊組成。數據管理層為邏輯管理層提供數據管理支撐。
(3)通信子層包括:將底層網絡通信接口進行封裝,對數據管理層提供高效的網絡數據傳輸支撐。
為保證通信服務端的實現性能,在Windows系統平臺下選擇完成端口(Completion Port)Socket I/O模型,以提升高速CPU和慢速I/O設備(網絡適配器)間的高效協調。

表1:實驗測試結果表(a)

表2:實驗測試結果表(b)
采用IOCP模型編寫服務程序主要包括兩種類型的線程:主線程和工作線程。主線程負責創建并監聽套接字,創建工作線程,等待并接受客戶端的連接,并將其關聯到IOCP等,而工作線程則負責等待并處理在IOCP 對象上完成的事件。
基于IOCP模型編寫的服務端工作流程如圖2所示。
(1)對網絡進行初始化,并設置Socket版本號;
(2)創建一個I/O完成端口,為完成端口分配套接字句柄,并對端口進行標識;
天上有兩三顆星星,林內幽暗,我們捉迷藏,吹竹葉,她還要我在竹梢上施展輕功奔跑……吃過飯,她找了塊地,說:“今晚就睡這。”
(3)準備好一個監聽套接字,并創建監聽線程,開始監聽網絡上客戶端的連接請求;
(4)創建工作線程池,當有客戶端請求連接時,主線程建立新的連接,為新連接的客戶端建立上下文信息,并將該客戶端套接字句柄關聯到完成端口,然后投遞一個異步的收發調用;
(5)工作線程循環獲取消息隊列狀態,從客戶上下文信息中獲取與Socket相關的上下文信息,判斷消息狀態,取得要操作的數據內容;
(6)主程序繼續下一個循環,等待新的客戶端連接;
(7)Windows操作系統內核完成收發操作,并將結果發送到完成端口;工作線程對數據進行處理,然后提交下一個操作請求,繼續下一次循環并阻塞獲取消息隊列狀態;
(8)重復步驟(5)至(7),直至服務端程序退出。
公共接口類的主要接口包括:客戶端類和主題類。客戶端類主要接口內容為客戶端初始化、客戶端退出、與服務端建立連接、向通信服務發送數據和檢查客戶端狀態等。主題類主要接口內容為發布主題、取消主題、訂閱主題和取消訂閱主題。

圖1:系統組成示意圖

圖2:服務端工作流程圖
數據接口類主要接口內容為:設置接收對象、設置重連間隔、設置客戶端緩沖區大小、綁定客戶端地址和接收數據等。
面向實時數據流的高效通信服務系統,實現了數據發送端與數據接收端的松耦合關系,支持點對點傳輸和發布訂閱傳輸兩種傳輸模式,傳輸應用流程如圖4所示。
在點對點傳輸模式下,數據發送端發送的數據僅可被一個數據接收端處理。在發布訂閱傳輸模式下,一個客戶端應用發布數據,一個或多個客戶端應用訂閱數據;發布的數據副本會被與訂閱主題匹配的一個或多個訂閱應用收到,服務端基于主題將數據轉發至訂閱該主題的客戶端。
實驗環境包括1臺運行通信服務端的服務器、5臺運行通信客戶端的計算機和1臺48口千兆交換機。其中服務器的配置為:處理器Intel(R) Core(TM) i7-4790 CPU @3.6GHZ*8,內存8G,雙千兆網卡,Window 7 專業版。實驗從客戶端接入數量、主題申請數量兩個維度,對數據吞吐量、數據轉發延遲和傳輸丟包率3項指標進行了分析測試,測試結果如表1和表2所示。
本文介紹了面向實時數據流的高效通信服務系統的設計和實現,能夠滿足高并發、大流量的實時數據通信,通過系統實現,簡化了應用客戶端通信實現和管理的難度,為信息系統間互聯提供了具備靈活性和擴展性特點的通信手段。經實驗驗證,系統運行高效、穩定,可為信息系統通信服務的設計實現提供借鑒。

圖3:通信客戶端類圖

圖4:數據傳輸應用流程圖