基於IOCP的區域網監控系統

2021-05-04 01:14:23 字數 2788 閱讀 5830

1.西華師範大學物理與電子資訊學院   南充 637002

2.西華師範大學計算機學院               南充 637002

基於iocp的區域網監控系統

摘 要本文介紹了一種在windows平台上比較成熟的i/o方法---完成埠,提出了通過使用iocp機制和旁視列表技術建立網路伺服器模型的方法,實現了利用為數不多的執行緒為成千上萬的客戶同時提供網路服務,解決了大多數網路伺服器連線大量客戶端和處理大量資料時存在的問題,獲得了極好的效能和強大的擴充套件能力。文章給出了基於windows 2000平台的區域網監控系統中網路伺服器的設計與實現過程。 

1  引言

2  iocp機制

3  資料庫同步機制實現過程:

4  記憶體分配機制

5  實現過程

5.1 初始化

5.2 啟動服務

5.3完成通知執行緒內部處理

6 結束語

在區域網遠端監控系統中,網路管理中心需要同時監控每個客戶端計算機的運**況,將遠端監控畫面顯示在管理中心的電腦螢幕上。網路伺服器要求實現定時截獲客戶端計算機上的螢幕資料與正在執行程式的資料,定時擷取客戶端螢幕影象,並將截獲的資料和影象儲存在資料庫中等功能。在較大型區域網中有幾百上千個客戶端,需要對大量的客戶端資料進行處理。因此如何讓網路伺服器同時為多個客戶端服務,但又不喪失整體的效能成為開發的難點。本文採用了i/o完成埠、旁視列表等技術,設計了一種高效的網路伺服器,讓此問題得到了有效的解決。

圖1 完成埠工作模式

完成埠模式要求建立乙個win32完成埠物件來對重疊i/o請求進行管理,並通過建立一定數量的工作者執行緒(workthread),來為已經完成的重疊i/o請求提供服務。其實,可以把完成埠看成系統維護的乙個佇列,作業系統把重疊i/o操作完成的事件通知放入該佇列,由於是「操作完成」的事件通知,故取名為「完成埠」。乙個完成埠被建立以後,可以和多個檔案控制代碼進行關聯(檔案控制代碼可以是真正的檔案控制代碼,也可以是socket控制代碼或命名管道),並在關聯後的控制代碼上進行重疊i/o操作。當i/o操作完成後,乙個重疊i/o完成的事件通知就會被排在此埠的完成佇列上,此時,某個工作者執行緒將會被喚醒來為完成埠服務,執行特定的處理工作。一般來說,乙個應用程式可以建立多個工作者執行緒來處理完成埠上的通知事件,工作者執行緒的數量依賴於程式的具體需要。 

圖2 系統結構圖

(1)整體系統安裝初始,各個同步端的資料庫初始化為一致。

(7)某同步端選擇登出,資料伺服器刪除該同步端的sql佇列。

在該系統中記憶體的分配和釋放比較頻繁,為了比較高效分配釋放資料,採用一種稱作lookaside list(旁視列表)的資料結構。在該系統中用於單句柄資料和重疊運算元據(完成鍵)的分配和釋放。lookaside list的原理是在分配一塊資料空間前,先檢視**鍊錶中是否有資料空間指標,如果有則不需要呼叫系統的記憶體分配,直接使用**鍊錶中的該指標指向的資料空間,並將**鍊錶中該指標節點移除,當使用完資料空間後,也不必調系統的記憶體釋放,而將該資料空間指標移入**鍊錶。在程序最終結束後才將**鍊錶中的所有指標指向的資料空間釋放。從而大大減低程式在執行期的頻繁記憶體分配和釋放產生的開銷。

讀取伺服器配置檔案,初始化客戶端連線鍊錶;建立完成埠,根據cpu個數建立等待和接受完成通知的執行緒;初始化winsock介面,建立偵聽socket;取擴充套件函式acceptex;關聯完成埠到偵聽socket;繫結和偵聽。

(1)建立網路事件、設定該網路事件為偵聽socket的accept網路事件,這樣當acceptex一次性分配的n個預備socket由於滿足不斷上來的tcp連線而耗盡,並有新的tcp連線請求時,就會觸發偵聽socket的accept事件,伺服器就會在這個時機呼叫acceptex再次分配n個新的預備socket以滿足新的tcp連線請求。在該系統中,n=10。

(2)分配的n個預備socket

(3)建立檢查和分配執行緒,該執行緒作用:等待accept網路事件以分配新的預備socket;定時檢測和結束通話未收發任何資料且超時連線的tcp連線,防止dos(拒絕服務)攻擊。

資料處理都放在handledata中實現,資料處理完後的響應**都在dataaction中實現,在此不做詳細介紹。

編寫網路伺服器應用程式的難點在於程式的「可擴充套件性」,即如何開發出大容量且能處理大量併發socketi/o請求的高效能**應用程式。iocp機制通過完成埠物件來對重疊i/o請求進行管理,並且利用多執行緒來處理重疊i/o操作完成後得到的資料,是一種與win32 sockets結合度較高的實現高效率i/o的有效方法。

本文設計的網路伺服器在區域網監控系統中成功使用。實際應用表明:利用iocp機制實現的網路伺服器應用程式能夠針對大量的客戶請求進行高效處理,在速度和效能上體現出其良好的特徵,不失為一種實現網路伺服器的有效技術。

[1] 張靜華,張玉明.iocp研究及在大規模網路通訊系統中的應用. 計算機與現代化,2004,9

[2] 陳和平,周靜寧等.iocp機制與網路**伺服器實現方法.計算機應用,2003,4

[3] anthony jones,jim ohlund著.windows網路程式設計技術.機械工業出版社,2000,(176-206)

[4] 潘愛民,王國印譯.visual c++技術內幕(第四版).清華大學出版社,1999

[5] 官章全,韓雲君等.visual c++6.0高階程式設計範例.電子工業出版社,2001

區域網電報系統

對 socket 程式設計略有所聞,但一直不知道是怎麼回事。這周抽空研究了幾天,同時熟悉了一下c 函式,最終生硬地湊了個區域網傳輸系統,附帶morse code與english的互譯功能。權當練練手吧!程式功能最初是這樣設想的 服務端與客戶端相互傳送莫爾斯電碼,接收端負責將莫爾斯電碼翻譯為自然語言。...

區域網監控系統綜合佈線線纜選擇建議

在區域網中,監控系統安裝使用極為普遍,包括傳輸線路 集線器 網管中心等裝置,資訊網路的基礎是綜合佈線系統,直接影響著安防監控系統效能的好壞。而在這方面,直接跟傳輸影象訊號的介質相關,主要有同軸電纜 雙絞線和光纖等。在佈線方面,有線網路傳輸與模擬攝像機佈線方式相同。在選用資料線方面,網路監控攝像機選擇...

區域網是什麼 區域網的介紹

區域網 local area network,l是指在某一區域內由多台計算機互聯程式設計客棧成的計算機組。一般是方圓幾千公尺以內。區域網可以實現檔案管理 應用軟體共享 印表機共享 工作組內的日程安排 電子郵件和傳真通訊服務等功能。區域網是封閉型的,可以由辦公室www.cppcns.com內的兩台計算...