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