基于IOCP的遠(yuǎn)程屏幕監(jiān)控系統(tǒng)
隨著網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,遠(yuǎn)程桌面共享技術(shù)已經(jīng)越來越多地運(yùn)用于遠(yuǎn)程辦公、教育培訓(xùn)、遠(yuǎn)程監(jiān)控等方方面面。微軟在Windows NT 3.5中引入了IOCP(I/O Completion Port,I/O完成端口),該模型被廣泛應(yīng)用于大規(guī)模的網(wǎng)絡(luò)服務(wù)器之上,遠(yuǎn)程屏幕監(jiān)控服務(wù)器利用IOCP可以同時(shí)有效地對(duì)多個(gè)客戶端屏幕進(jìn)行監(jiān)控。
1 遠(yuǎn)程屏幕監(jiān)控系統(tǒng)的總體結(jié)構(gòu)
在Windows系統(tǒng)中,對(duì)于大型的服務(wù)器應(yīng)用一般設(shè)計(jì)為C/S模式,通過在客戶端和服務(wù)器之間建立網(wǎng)絡(luò)連接來實(shí)現(xiàn)信息的傳輸。對(duì)于服務(wù)器來說,在同一時(shí)間可能需要監(jiān)控多個(gè)客戶端屏幕,在遠(yuǎn)程屏幕監(jiān)控系統(tǒng)的大致結(jié)構(gòu)如圖1所示。
由被監(jiān)控的客戶端捕捉屏幕圖像,經(jīng)過壓縮之后實(shí)時(shí)地傳輸給服務(wù)器,服務(wù)器打開一個(gè)窗口,并將收到的客戶端屏幕圖像數(shù)據(jù)顯示在該窗口中,如需對(duì)客戶端進(jìn)行控制,則服務(wù)器端將該窗口中捕捉到的鼠標(biāo)鍵盤消息發(fā)送到客戶端,客戶端收到此消息后模擬出鼠標(biāo)鍵盤點(diǎn)擊事件,實(shí)現(xiàn)遠(yuǎn)程控制。采用IOCP機(jī)制,只需要為數(shù)不多的幾個(gè)線程就同時(shí)為多個(gè)客戶端提供服務(wù),并且效率遠(yuǎn)高于其它網(wǎng)絡(luò)模型。
2 IOCP機(jī)制的基本原理
IOCP是性能較好的一種I/O模型。它是應(yīng)用程序使用線程池處理異步I/O請(qǐng)求的一種機(jī)制。在處理多個(gè)并發(fā)的異步I/O請(qǐng)求時(shí),以往的模型都是在接收請(qǐng)求時(shí)創(chuàng)建一個(gè)線程來應(yīng)答請(qǐng)求。這樣就有很多的線程并行地運(yùn)行在系統(tǒng)中。而這些線程都是可運(yùn)行的,Windows內(nèi)核花費(fèi)大量的時(shí)間在進(jìn)行線程的上下文切換,并沒有多少時(shí)間花在線程運(yùn)行上。再加上創(chuàng)建新線程的開銷比較大,所以造成了效率的低下。
IOCP的目標(biāo)是實(shí)現(xiàn)高效的服務(wù)器程序,它克服了一般并發(fā)模型的不足,其方法是在初始化完成端口的時(shí)候創(chuàng)建一定數(shù)量的服務(wù)線程。當(dāng)系統(tǒng)完成I/O操作之后,向服務(wù)器完成端口發(fā)送I/O completion packet,此時(shí)線程池中的線程在完成端口上排隊(duì)等待I/O操作的完成。如果在完成端口上沒有收到I/O completion packet,這些線程處于睡眠狀態(tài)。否則,這些線程按照后進(jìn)先出(LIFO)的方式被喚醒,并完成后續(xù)數(shù)據(jù)處理操作。
3 服務(wù)器設(shè)計(jì)
遠(yuǎn)程屏幕監(jiān)控服務(wù)器的核心功能是將接收到的客戶端的屏幕圖像顯示到一個(gè)服務(wù)器端窗口中,服務(wù)器通過此窗口對(duì)客戶端進(jìn)行遠(yuǎn)程控制。為了提高系統(tǒng)可靠性,網(wǎng)絡(luò)協(xié)議采用面向連接的TCP協(xié)議,利用TCP協(xié)議中的擁塞避免以及超時(shí)和差錯(cuò)重傳機(jī)制可以確保數(shù)據(jù)在傳輸?shù)目煽啃浴?br />3.1 服務(wù)器監(jiān)聽套接字的實(shí)現(xiàn)
在服務(wù)器端建立IOCP模型時(shí),首先需要建立一個(gè)監(jiān)聽套接字,對(duì)于監(jiān)聽套接字,并不將它與完成端口相關(guān)聯(lián),而是調(diào)用WSAEventSelect為監(jiān)聽套接字注冊FD_ACCEPT網(wǎng)絡(luò)事件。該函數(shù)的聲明如下:
之后創(chuàng)建一個(gè)監(jiān)聽線程,在此線程中可以循環(huán)調(diào)用WSAWaitForMultipleEvents等待事件對(duì)象被觸發(fā)。在該函數(shù)正確返回之后,繼續(xù)調(diào)用WSAEnumNetworkEvents函數(shù)列舉出發(fā)生在套接字上的事件,如果是FD_ACCEPT事件,則接受該連接,并將新建的套接字與創(chuàng)建的完成端口相關(guān)聯(lián),并在此套接字上調(diào)用WSARecv投遞接收數(shù)據(jù)的請(qǐng)求。
3.2 IOCP模型的實(shí)現(xiàn)
要建立IOCP模型,需要在服務(wù)器啟動(dòng)監(jiān)聽線程時(shí),首先創(chuàng)建一個(gè)完成端口對(duì)象,通過調(diào)用CreateIoCompletionPort來實(shí)現(xiàn),之后調(diào)用GetSystemlnfo函數(shù)獲得CPU的數(shù)量,根據(jù)CPU的數(shù)量創(chuàng)建一定數(shù)量的服務(wù)線程在此端口上等待完成事件的通知,一般來說,服務(wù)線程的數(shù)量大約是CPU數(shù)量的2倍。
當(dāng)監(jiān)聽套接字接收到一個(gè)新的連接時(shí),再次調(diào)用CreateIoCompletionPort將接收套接字與我們先前創(chuàng)建的完成端口綁定。這里的完成鍵pComleKey是一個(gè)指向ClientContext結(jié)構(gòu)體的指針,該結(jié)構(gòu)體包含了當(dāng)前套接字的一些相關(guān)信息,接受和發(fā)送數(shù)據(jù)所用的緩存。接下來需要定義一個(gè)與I/O操作相關(guān)的結(jié)構(gòu)體,保存與I/O操作相關(guān)的信息。該結(jié)構(gòu)體的定義如下:
其中m_ioType表示I/O操作的類型,接下來需要調(diào)用WSARecv發(fā)起重疊的I/O操作請(qǐng)求,并將向前創(chuàng)建的OVERLAPPEDPLUS結(jié)構(gòu)體作為參數(shù)傳遞進(jìn)去。具體如下:
服務(wù)線程被啟動(dòng)后,調(diào)用GetQueuedCompletionStation函數(shù)等待重疊I/O操作的完成,當(dāng)重疊I/O操作完成時(shí),I/O操作完成通知包被發(fā)送到完成端口上,此時(shí)該函數(shù)返回,完成通知包包含的信息有已傳輸?shù)淖止?jié)數(shù)、完成鍵和重疊結(jié)構(gòu)。根據(jù)返回的I/O操作的具體信息,調(diào)用相應(yīng)的處理函數(shù)對(duì)結(jié)果進(jìn)行處理。在處理完數(shù)據(jù)之后,需要再次向完成端口投遞I/O操作請(qǐng)求。我們可以通過調(diào)用PostQueuedCompletion Status函數(shù)來向完成端口發(fā)送一個(gè)I/O操作完成通知包。圖2是整個(gè)網(wǎng)絡(luò)傳輸?shù)墓ぷ髁鞒虉D。
7 結(jié)束語
在Windows7環(huán)境下建立服務(wù)器運(yùn)行平臺(tái),100M局域網(wǎng)內(nèi),7個(gè)客戶同時(shí)連接到服務(wù)器,服務(wù)器能正常運(yùn)行,同時(shí)打開7個(gè)客戶端的屏幕監(jiān)控窗口,客戶端屏幕圖像顯示無明顯延遲,需要時(shí)可正常開啟遠(yuǎn)程控制功能;贗OCP的服務(wù)器理論上可以連接成百上千個(gè)客戶端,但是由于網(wǎng)絡(luò)帶寬,硬件配置等限制,連接數(shù)量往往有一定的限制。基于IOCP的服務(wù)器程序優(yōu)點(diǎn)在于能夠?qū)Υ罅康目蛻暨B接進(jìn)行有效管理,資源利用率高,具有易擴(kuò)展性,隨著硬件配置的提高,無需改動(dòng)程序,其性能就可以隨之提升。
相關(guān)閱讀:
- ...2012/04/10 13:16·基于IEC61850變電站IED的研制
- ...2011/12/19 10:26·恩智浦基于I2C接口的LED驅(qū)動(dòng)器設(shè)計(jì)與實(shí)現(xiàn)
- ...2009/08/06 15:57·基于IPC的轉(zhuǎn)爐噪聲督導(dǎo)吹煉系統(tǒng)
- ...2009/04/02 11:21·中興通訊基于IMS的多網(wǎng)絡(luò)融合解決方案
- ...·圖文詳解汽車儀表板背后的車規(guī)級(jí)安全設(shè)計(jì)要求
- ...·使用有安全保障的閃存存儲(chǔ)構(gòu)建安全的汽車系統(tǒng)
- ...·反向偏置差分線性傳感器的較新進(jìn)展和應(yīng)用
- ...·艾德克斯測評(píng)某品牌智能插座——待機(jī)功耗篇
- ...·三線電阻式溫度檢測器測量系統(tǒng)中勵(lì)磁電流失配的影響(續(xù))
- ...·三線電阻式溫度檢測器測量系統(tǒng)中勵(lì)磁電流失配的影響
- ...·RTD測量系統(tǒng)中勵(lì)磁電流失配的影響
- ...·藍(lán)牙BR/EDR 和 Bluetooth Smart的十大重要區(qū)別
- ...·IoT網(wǎng)關(guān)平臺(tái)與應(yīng)用
- ...·增強(qiáng)版ARM DesignStart:通向定制化SoC的較快、較低風(fēng)險(xiǎn)之路
- ...·實(shí)體零售轉(zhuǎn)型O2O,倉儲(chǔ)物流的智能化水平從何提升?
- ...·幾種車用LED驅(qū)動(dòng)方案的比較
- ...·藍(lán)牙配對(duì)第二篇:密鑰生成方法
- ...·中電瑞華推出領(lǐng)先的無線數(shù)據(jù)采集解決方案
- ...·安森美半導(dǎo)體配合市場趨勢的無線充電方案
- ...·安森美半導(dǎo)體配合汽車照明設(shè)計(jì)趨勢的解決方案
- ...· “芯創(chuàng)杯”首屆高校未來汽車人機(jī)交互設(shè)計(jì)大賽報(bào)名正式啟動(dòng)
- ...· 探秘第二屆衛(wèi)藍(lán)山鷹“創(chuàng)新·共享”試驗(yàn)技術(shù)論壇!
- ...· “2018中國半導(dǎo)體生態(tài)鏈大會(huì)”在江蘇省盱眙舉行
- ...· 新主題新規(guī)劃,CITE 2019瞭望智慧未來
- ...· 從汽車到工廠,TI毫米波傳感器致力于創(chuàng)造更智能的世界
- ...· 意法半導(dǎo)體(ST)、Cinemo和Valens在CES 2018展上聯(lián)合演示汽車信息娛樂解決方案
- ...· 北京集成電路產(chǎn)業(yè)創(chuàng)新發(fā)展高峰論壇即將在京召開
- ...· 三菱電機(jī)強(qiáng)勢出擊PCIM亞洲2017展
- ...· GPGPU國產(chǎn)替代:中國芯片產(chǎn)業(yè)的空白地帶
- ...· 物聯(lián)網(wǎng)產(chǎn)品設(shè)計(jì)中Wi-Fi連接的四個(gè)關(guān)鍵因素
- ...· 第三屆中國MEMS智能傳感器產(chǎn)業(yè)發(fā)展大會(huì)即將于蚌埠拉開帷幕
- ...· IAIC專項(xiàng)賽演繹“中國芯“應(yīng)用創(chuàng)新,信息安全高峰論壇亮劍海寧
- ...· 智能控制有源鉗位反激
- ...· 解讀5G毫米波OTA 測試技術(shù)
- ...· 多個(gè)市場高速增長推動(dòng)Molex加強(qiáng)汽車領(lǐng)域的發(fā)展
- ...· 中國綠色制造聯(lián)盟成立大會(huì)召開在即 政產(chǎn)學(xué)研用共探綠色發(fā)展新模式
- ...· Efinix® 全力驅(qū)動(dòng)AI邊緣計(jì)算,成功推出Trion™ T20 FPGA樣品, 同時(shí)將產(chǎn)品擴(kuò)展到二十萬邏輯單元的T200 FPGA
- ...· 英飛凌亮相進(jìn)博會(huì),引領(lǐng)智慧新生活
- ...· 三電產(chǎn)品開發(fā)及測試研討會(huì)北汽新能源專場成功舉行
- ...· Manz亞智科技跨入半導(dǎo)體領(lǐng)域 為面板級(jí)扇出型封裝提供化學(xué)濕制程、涂布及激光應(yīng)用等生產(chǎn)設(shè)備解決方案
- ...· 中電瑞華BITRODE動(dòng)力電池測試系統(tǒng)順利交付北汽新能源
- ...· 中電瑞華FTF系列電池測試系統(tǒng)中標(biāo)北京新能源汽車股份有限公司
- ...· 中電瑞華大功率高壓能源反饋式負(fù)載系統(tǒng)成功交付中電熊貓
- ...· 中電瑞華國際在電動(dòng)汽車及關(guān)鍵部件測評(píng)研討會(huì)上演繹先進(jìn)測評(píng)技術(shù)
- ...· 數(shù)據(jù)采集終端系統(tǒng)設(shè)備
- ...· 簡儀科技踏上新征程
- ...· 易靈思® 宣布 AEC-Q100 資質(zhì)認(rèn)證和汽車系列產(chǎn)品計(jì)劃
- ...· 易靈思® 宣布擴(kuò)充高性能 鈦金系列™ FPGA 產(chǎn)品 鈦金系列產(chǎn)品擴(kuò)充至包含 1M 邏輯單元的 FPGA
- ...· 易靈思® 宣布Trion® Titanium 在臺(tái)積電 (TSMC) 16納米工藝節(jié)點(diǎn)流片
- ...· TI杯2019年全國大學(xué)生電子設(shè)計(jì)競賽頒獎(jiǎng)典禮在京舉行
- ...· BlackBerry QNX虛擬機(jī)獲得全球首個(gè)汽車安全完整性等級(jí)(ASIL) ‘D’認(rèn)證
- ...· 威馬汽車選擇BlackBerry助力下一代汽車