基于IOCP的遠(yuǎn)程屏幕監(jiān)控系統(tǒng)
摘要:利用Windows提供的完成端口(IOCP)模型,實現(xiàn)C/S模式下遠(yuǎn)程屏幕監(jiān)控服務(wù)器同時對大量并發(fā)客戶進(jìn)行屏幕監(jiān)控的功能,可以根據(jù)需要決定是否開始遠(yuǎn)程控制。用IOCP對多線程進(jìn)行調(diào)度和管理,高效地利用系統(tǒng)資源。并且給出了整個系統(tǒng)的網(wǎng)絡(luò)設(shè)計與實現(xiàn)過程。
關(guān)鍵字:IOCP;多線程;遠(yuǎn)程屏幕監(jiān)控
隨著網(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可以同時有效地對多個客戶端屏幕進(jìn)行監(jiān)控。
1 遠(yuǎn)程屏幕監(jiān)控系統(tǒng)的總體結(jié)構(gòu)
在Windows系統(tǒng)中,對于大型的服務(wù)器應(yīng)用一般設(shè)計為C/S模式,通過在客戶端和服務(wù)器之間建立網(wǎng)絡(luò)連接來實現(xiàn)信息的傳輸。對于服務(wù)器來說,在同一時間可能需要監(jiān)控多個客戶端屏幕,在遠(yuǎn)程屏幕監(jiān)控系統(tǒng)的大致結(jié)構(gòu)如圖1所示。
由被監(jiān)控的客戶端捕捉屏幕圖像,經(jīng)過壓縮之后實時地傳輸給服務(wù)器,服務(wù)器打開一個窗口,并將收到的客戶端屏幕圖像數(shù)據(jù)顯示在該窗口中,如需對客戶端進(jìn)行控制,則服務(wù)器端將該窗口中捕捉到的鼠標(biāo)鍵盤消息發(fā)送到客戶端,客戶端收到此消息后模擬出鼠標(biāo)鍵盤點擊事件,實現(xiàn)遠(yuǎn)程控制。采用IOCP機(jī)制,只需要為數(shù)不多的幾個線程就同時為多個客戶端提供服務(wù),并且效率遠(yuǎn)高于其它網(wǎng)絡(luò)模型。
2 IOCP機(jī)制的基本原理
IOCP是性能最好的一種I/O模型。它是應(yīng)用程序使用線程池處理異步I/O請求的一種機(jī)制。在處理多個并發(fā)的異步I/O請求時,以往的模型都是在接收請求時創(chuàng)建一個線程來應(yīng)答請求。這樣就有很多的線程并行地運(yùn)行在系統(tǒng)中。而這些線程都是可運(yùn)行的,Windows內(nèi)核花費大量的時間在進(jìn)行線程的上下文切換,并沒有多少時間花在線程運(yùn)行上。再加上創(chuàng)建新線程的開銷比較大,所以造成了效率的低下。
IOCP的目標(biāo)是實現(xiàn)高效的服務(wù)器程序,它克服了一般并發(fā)模型的不足,其方法是在初始化完成端口的時候創(chuàng)建一定數(shù)量的服務(wù)線程。當(dāng)系統(tǒng)完成I/O操作之后,向服務(wù)器完成端口發(fā)送I/O completion packet,此時線程池中的線程在完成端口上排隊等待I/O操作的完成。如果在完成端口上沒有收到I/O completion packet,這些線程處于睡眠狀態(tài)。否則,這些線程按照后進(jìn)先出(LIFO)的方式被喚醒,并完成后續(xù)數(shù)據(jù)處理操作。
評論