專利名稱:無拆分遠程桌面協(xié)議(rdp)顯示的制作方法
無拆分遠程桌面協(xié)議(RDP)顯示
背景技術(shù):
盡管計算機曾經(jīng)被隔離并且與其他計算機具有最少的或很少的交互,但是當今的計算機通過諸如局域網(wǎng)(LAN)和廣域網(wǎng)(WAN)之類的通信網(wǎng)絡(luò)與多種多樣的其他計算機進行交互。隨著因特網(wǎng)TM的廣泛發(fā)展,計算機之間的連通性變得越來越重要,并開拓了許多新的應(yīng)用和技術(shù)。大規(guī)模網(wǎng)絡(luò)的增長以及低成本個人計算機的廣泛可用性已經(jīng)從根本上改變了許多人工作、交互、通信、以及玩樂的方式。一種聯(lián)網(wǎng)的越來越流行的形式一般可以被稱為虛擬計算系統(tǒng),其可以使用諸如遠程桌面協(xié)議(RDP)、獨立計算體系結(jié)構(gòu)(ICA)等等之類的協(xié)議,來與遠程客戶機共享桌面及其他應(yīng)用程序。這樣的計算系統(tǒng)通常將對鍵盤鍵的敲擊和鼠標點擊或選中從客戶端傳送到服務(wù)器,同時通過網(wǎng)絡(luò)連接(例如,因特網(wǎng))以另一方向?qū)⑵聊桓轮欣^回去。因此,當在現(xiàn)實中在應(yīng)用出現(xiàn)在服務(wù)器側(cè)時僅僅將所述應(yīng)用的屏幕截圖發(fā)送給客戶端設(shè)備時,用戶具有就好像他們的機器充當LAN的一部分的體驗。在遠程會話中,可以對顯示進行“屏幕拆分”,其中新近呈現(xiàn)的幀與之前呈現(xiàn)的幀部分地重疊,從而創(chuàng)建就好像所顯示對象的兩個部分未排列整齊的經(jīng)拆分的外觀。這最經(jīng)常地發(fā)生在遠程桌面協(xié)議(RDP)會話中諸如動畫或視頻回放之類的快速繪制的時間段期間。屏幕拆分將隨著RDP在諸如位圖編碼、批量壓縮和傳輸棧之類的領(lǐng)域中的進步而變得更重要。因此,對現(xiàn)有技術(shù)的改進將是聚集相關(guān)的圖形數(shù)據(jù)以保證其作為單個視覺單元來呈現(xiàn);以及邏輯上對應(yīng)當成組地從陰影緩沖器中復(fù)制到顯示表面的相關(guān)繪制順序進行批處理。
發(fā)明內(nèi)容
指令的邏輯批處理可以由RDP服務(wù)器來添加。該添加可以通過允許已經(jīng)具有通過 RDP被發(fā)送的顯示輸出的應(yīng)用插入“開始邏輯幀”和“結(jié)束邏輯幀”標記來完成。這還可以由RDP系統(tǒng)的如下組件來完成該組件檢查所接收的經(jīng)編碼的繪制順序流,據(jù)此確定相關(guān)繪制順序的起始和結(jié)尾,并且在這些點處插入“開始邏輯幀”和“結(jié)束邏輯幀”標記。在示例性實施例中,服務(wù)器確定順序堆中的至少兩個邏輯上相關(guān)的繪制順序,并且用開始標記和結(jié)束標記來包裝這些順序。其在通信網(wǎng)絡(luò)的范圍內(nèi)將這些經(jīng)包裝的順序發(fā)送給客戶端??蛻舳私邮者@些順序并且將其呈現(xiàn)給陰影緩沖器。當客戶端處理結(jié)束標記時, 其將陰影緩沖器中的繪制順序移到客戶端顯示表面。本領(lǐng)域技術(shù)人員將理解,本發(fā)明的一個或多個方面可包括但不限于用于實現(xiàn)本發(fā)明的本文所述方面的電路和/或編程;該電路和/或編程實質(zhì)上可以是配置成實現(xiàn)本文所述方面的硬件、軟件和/或固件的任何組合,這取決于系統(tǒng)設(shè)計者的設(shè)計選擇。以上是概述,并且因此必然包含細節(jié)的簡化、一般化及省略。本領(lǐng)域技術(shù)人員將明白,本概述只是說明性的并且決不旨在是限制性的。
參考附圖來進一步描述根據(jù)本說明書的的系統(tǒng)、方法和計算機可讀介質(zhì),附圖圖1示出了可在其中體現(xiàn)了在此描述的無拆分(tear-free)遠程顯示的示例性通用計算環(huán)境。圖2描繪了用于實施本發(fā)明的各方面的操作環(huán)境。圖3示出了客戶端和服務(wù)器通過利用無拆分遠程顯示技術(shù)的遠程桌面協(xié)議(RDP) 進行通信。圖4示出了用于服務(wù)器側(cè)無拆分遠程顯示的示例性操作過程。圖5示出了用于客戶端側(cè)無拆分遠程顯示的示例性操作過程。說明性實施例的詳細描述圖1是在其中可實現(xiàn)在此描述的技術(shù)的通用計算設(shè)備的框圖。計算系統(tǒng)環(huán)境120 只是合適的計算環(huán)境的一個示例,并且不旨在對所公開的主題的使用范圍或功能提出任何限制。也不應(yīng)該將計算環(huán)境120解釋為對示例性操作環(huán)境120中示出的任一組件或其組合有任何依賴性或要求。在某些實施例中,所描繪的各種計算元素可包括被配置成實例化本公開的各具體方面的電路。例如,本公開中使用的術(shù)語電路可包括被配置成通過固件或開關(guān)來執(zhí)行功能的專用硬件組件。其他示例中,術(shù)語電路可包括由實施可用于執(zhí)行功能的邏輯的軟件指令配置的通用處理單元、存儲器等。在其中電路包括硬件和軟件的組合的示例實施例中,實施者可以編寫體現(xiàn)邏輯的源代碼,且源代碼可以被編譯為可以由通用處理單元處理的機器可讀代碼。因為本領(lǐng)域技術(shù)人員可以明白現(xiàn)有技術(shù)已經(jīng)進化到硬件、軟件或硬件/軟件組合之間幾乎沒有差別的地步,因而選擇硬件或是軟件來實現(xiàn)具體功能是留給實現(xiàn)者的設(shè)計選擇。更具體地,本領(lǐng)域技術(shù)人員可以明白軟件進程可被變換成等價的硬件結(jié)構(gòu),而硬件結(jié)構(gòu)本身可被變換成等價的軟件進程。因此,對于硬件實現(xiàn)還是軟件實現(xiàn)的選擇是設(shè)計選擇并留給實現(xiàn)者。計算機141通常包括各種計算機可讀介質(zhì)。計算機可讀介質(zhì)可以是可以被計算機 141訪問的任何可用的介質(zhì),并包括易失性和非易失性介質(zhì),可移動的和不可移動的介質(zhì)。 系統(tǒng)存儲器122包括易失性和/或非易失性存儲器形式的計算機存儲介質(zhì),如只讀存儲器 (ROM) 123和隨機存取存儲器(RAM) 160?;据斎?輸出系統(tǒng)IM(BIC)Q包括如在啟動時幫助在計算機141內(nèi)的元件之間傳輸信息的基本例程,它通常儲存在ROM 123中。RAM 160 通常包含處理單元159可以立即訪問和/或目前正在操作的數(shù)據(jù)和/或程序模塊。作為示例而非限制,圖1示出操作系統(tǒng)125、應(yīng)用程序126、其他程序模塊127和程序數(shù)據(jù)128。計算機141也可以包括其他可移動的/不可移動的,易失性/非易失性的計算機存儲介質(zhì)。僅作為示例,圖1示出了從不可移動、非易失性磁介質(zhì)中讀取或向其寫入的硬盤驅(qū)動器138,從可移動、非易失性磁盤IM中讀取或向其寫入的磁盤驅(qū)動器139,以及從諸如 CD ROM或其他光學介質(zhì)等可移動、非易失性光盤153中讀取或向其寫入的光盤驅(qū)動器140。 可以在示例性操作環(huán)境中使用的其他可移動/不可移動、易失性/非易失性計算機存儲介質(zhì)包括但不限于,磁帶盒、閃存卡、數(shù)字多功能盤、數(shù)字錄像帶、固態(tài)RAM、固態(tài)ROM等等。硬盤驅(qū)動器138通常由例如接口 134等不可移動存儲器接口連接至系統(tǒng)總線121,而磁盤驅(qū)動器139和光盤驅(qū)動器140通常由例如接口 135等可移動存儲器接口連接至系統(tǒng)總線121。以上討論并在圖1中示出的驅(qū)動器及其相關(guān)聯(lián)的計算機存儲介質(zhì)為計算機141提供了對計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊和其他數(shù)據(jù)的存儲。在圖1中,例如,硬盤驅(qū)動器138被示為存儲操作系統(tǒng)158、應(yīng)用程序157、其他程序模塊156和程序數(shù)據(jù)155。注意, 這些組件可以與操作系統(tǒng)125、應(yīng)用程序126、其他程序模塊127和程序數(shù)據(jù)1 相同,也可以與它們不同。向操作系統(tǒng)158、應(yīng)用程序157、其他程序模塊156,以及程序數(shù)據(jù)155提供了不同的編號,以說明,至少,它們是不同的副本。用戶可以通過輸入設(shè)備,例如鍵盤151和定點設(shè)備152——通常是指鼠標、跟蹤球或觸摸墊——向計算機141輸入命令和信息。其他輸入設(shè)備(未示出)可包括話筒、游戲桿、游戲手柄、圓盤式衛(wèi)星天線、掃描儀等。這些和其他輸入設(shè)備通常通過耦合至系統(tǒng)總線的用戶輸入接口 136連接至處理單元159,但也可以由其他接口和總線結(jié)構(gòu),例如并行端口、游戲端口或通用串行總線(USB)來連接。監(jiān)視器142或其他類型的顯示設(shè)備也可以通過諸如視頻接口 132之類的接口,連接到系統(tǒng)總線 121。除監(jiān)視器之外,計算機還可以包括可以通過輸出外圍接口 133連接的諸如揚聲器144 和打印機143之類的其他外圍輸出設(shè)備。計算機141可以使用到一個或多個遠程計算機(如遠程計算機146)的邏輯連接, 以在聯(lián)網(wǎng)環(huán)境中操作。遠程計算機146可以是個人計算機、服務(wù)器、路由器、網(wǎng)絡(luò)PC、對等設(shè)備或其他常見網(wǎng)絡(luò)節(jié)點,并且通常包括許多或所有以上關(guān)于計算機141所描述的元件, 盡管在圖1中僅示出了存儲器存儲設(shè)備147。圖1中所示的邏輯連接包括局域網(wǎng)(LAN) 145 和廣域網(wǎng)(WAN) 149,但也可以包括其他網(wǎng)絡(luò)。這樣的聯(lián)網(wǎng)環(huán)境在辦公室、企業(yè)范圍的計算機網(wǎng)絡(luò)、內(nèi)部網(wǎng)和因特網(wǎng)中是普遍現(xiàn)象。當用于LAN網(wǎng)絡(luò)環(huán)境中時,計算機141通過網(wǎng)絡(luò)接口或適配器137連接到LAN 145。當在WAN聯(lián)網(wǎng)環(huán)境中使用時,計算機141通常包括調(diào)制解調(diào)器150或用于通過例如因特網(wǎng)等WAN 149建立通信的其他手段。調(diào)制解調(diào)器150,可以是內(nèi)置的或外置的,可以經(jīng)由用戶輸入接口 136或其他適當?shù)臋C制,連接到系統(tǒng)總線121。在聯(lián)網(wǎng)環(huán)境中,參考計算機 141所描述的程序模塊,或其某些部分,可以存儲在遠程存儲器存儲設(shè)備中。作為示例而非限制,圖1示出遠程應(yīng)用程序148駐留在存儲器設(shè)備147上??梢岳斫獾氖?,所示的網(wǎng)絡(luò)連接是示例性的,并且可以使用在計算機之間建立通信鏈路的其他手段?,F(xiàn)在參照圖2,其一般描繪其中可實現(xiàn)本公開的各方面的示例環(huán)境。本領(lǐng)域技術(shù)人員能夠理解,圖2所描繪的示例元素提供用于描述本公開的操作框架。因此,在一些實施例中,該環(huán)境的物理布局可取決于不同的實現(xiàn)方案而有所不同。因此,該示例操作框架將僅被視為說明性的且不以任何方式限制權(quán)利要求的范圍。本領(lǐng)域技術(shù)人員還可理解,以下討論是介紹性的,并且圖2描繪的元件在對圖3到圖8的操作過程的討論內(nèi)更詳細地描述。圖2總體上描繪了可被配置為包括本公開的各方面的終端服務(wù)器環(huán)境的高級概覽。參考該圖,描繪了服務(wù)器204,其可以包括被配置為實施終端服務(wù)器的電路以及例如三個示例性客戶端201、202和203 (盡管描繪了三個客戶端,但是服務(wù)器204在各實施例中可以服務(wù)于更多或更少的客戶端)。示例性的客戶端201-203可以包括由配置成將用戶輸入導向服務(wù)器204并顯示由服務(wù)器204生成的用戶界面信息的硬件所實現(xiàn)的計算機終端。在其他實施例中,客戶端201-203可以是包括與圖1的計算機20的元件相似的元件的計算機。在這些示例性實施例中,客戶端201-203可以包括配置成實現(xiàn)操作系統(tǒng)的電路以及配置成模擬終端的功能的電路。在這些示例中,本領(lǐng)域技術(shù)人員能夠理解,被配置為實現(xiàn)操作系統(tǒng)的電路也可以包括被配置為模擬終端的電路。在所描繪的示例中,服務(wù)器204可以被配置成生成用于連接客戶端201、202和203
6的一個或多個會話,諸如會話1到N(其中N是大于1的整數(shù))。簡言之,在本公開的示例性實施例中,會話一般可包括由配置成實現(xiàn)執(zhí)行環(huán)境并與操作系統(tǒng)214的服務(wù)器內(nèi)核218交互的多個子系統(tǒng)(例如,軟件代碼)實現(xiàn)的操作環(huán)境。例如,會話可包括諸如桌面之類的命令行界面和用戶界面、跟蹤該桌面內(nèi)的鼠標移動的子系統(tǒng)、將圖標上的鼠標點擊翻譯成實現(xiàn)程序?qū)嵗拿畹淖酉到y(tǒng)等等。在另一示例實施例中,會話可包括應(yīng)用。在該示例中,當呈現(xiàn)應(yīng)用時,桌面環(huán)境仍可被生成并對用戶隱藏。在該示例中,會話可以包括與上述會話類似的子系統(tǒng)。一般而言,例如在服務(wù)器204通過網(wǎng)絡(luò)連接從諸如客戶端201之類的客戶端接收到連接請求時,會話可以以逐用戶的基礎(chǔ)由服務(wù)器204對用戶生成。一般而言,連接請求首先可由傳輸邏輯210處理,傳輸邏輯210例如可由服務(wù)器204的電路實現(xiàn)。在一些實施例中,傳輸邏輯210可包括網(wǎng)絡(luò)適配器、可被配置成監(jiān)聽連接消息并將其轉(zhuǎn)發(fā)給引擎212 的固件和軟件。如圖2所示,在一些實施例中,當會話被生成時,傳輸邏輯210可以包括每個會話的協(xié)議棧實例。一般而言,每個協(xié)議棧實例可被配置成將用戶界面輸出路由到相關(guān)聯(lián)的客戶端、以及將從相關(guān)聯(lián)的客戶端接收到的用戶輸入路由到合適的會話核對4。如圖2所示,在會話生成過程期間,引擎212可以被配置為獲得會話的許可證。例如,在一個示例性實施例中,引擎212可以在會話生成過程期間從客戶端201接收許可證。 在其他示例性的實施例中,引擎212可以從許可證數(shù)據(jù)庫222接收許可證的副本。在本公開的一些實施例中,許可證數(shù)據(jù)庫222可以包括關(guān)系數(shù)據(jù)庫管理程序,該關(guān)系數(shù)據(jù)庫管理程序可以在諸如圖1的計算機20之類的計算機的操作系統(tǒng)上執(zhí)行。在包括許可證數(shù)據(jù)庫 222的示例性實施例中,該許可證數(shù)據(jù)庫可以存儲一個或多個許可證,所述許可證可以在客戶嘗試從服務(wù)器204獲得會話時被檢查。在另一實施例中,每個許可證本身都可以與諸如用戶名/ 口令組合、智能卡標識符等等之類的賬戶標識符相關(guān)聯(lián),并且每個許可證僅僅在呈遞了正確的賬戶標識符的情況下才能被檢查。一般而言,服務(wù)器204可以生成的連接的數(shù)目可以取決于控制服務(wù)器204的實體已經(jīng)從服務(wù)提供商購買的許可證的數(shù)目。例如,如果實體已經(jīng)購買了一個許可證,則服務(wù)器204可以被配置為僅僅允許一個會話。在該示例中,如果許可證與賬戶標識符相關(guān)聯(lián),則僅有呈遞了正確賬戶標識符的用戶可以獲得會話。在本公開的示例性實施例中,每個許可證都可以在它們能被使用以前由服務(wù)提供商262來確認。例如,在示例性的實施例中,服務(wù)提供商沈2可以充當創(chuàng)建(aphorize)和激活證書和服務(wù)器的證書機構(gòu)。在這些實施例中,服務(wù)提供商262可以保證證書不被盜竊、 復(fù)制或盜版。服務(wù)提供商262還可以通過將證書的副本存儲在數(shù)據(jù)庫中并且將證書與服務(wù)器204相關(guān)聯(lián)來保證證書僅由它們被購買以用于的服務(wù)器204來使用。如圖2所示,在本公開的示例性實施例中,配置管理器2 可以包括計算機可讀指令,所述指令在被執(zhí)行時實例化如下的進程該進程可以在會話創(chuàng)建過程期間接收證書并且通過與諸如會話管理器216之類的各種子系統(tǒng)對接來為新近產(chǎn)生的會話確定服務(wù)等級。 在一實施例中,會話管理器216例如可以通過如下方式配置來初始化并管理每個會話為會話空間生成會話標識符;將會話標識符添加到表;向會話空間分配存儲器;以及在分配給會話空間的存儲器中生成系統(tǒng)環(huán)境變量和子系統(tǒng)進程的實例。如圖2所示,在一實施例中,會話管理器216可以實例化諸如運行時子系統(tǒng)240之類的環(huán)境子系統(tǒng),該子系統(tǒng)可以包括諸如會話核244之類的內(nèi)核模式部分。例如,在一實施例中,環(huán)境子系統(tǒng)可以被配置成將服務(wù)的子集展示給應(yīng)用程序并向操作系統(tǒng)214的內(nèi)核218提供接入點。如圖2所示,在一些實施例中,內(nèi)核218可以包括安全子系統(tǒng)250和資源管理器256。在示例性實施例中,安全子系統(tǒng)250可以例如通過執(zhí)行運行時對象保護來實施服務(wù)器204的安全策略。在這些實施例中,一實施例中的資源管理器256可以響應(yīng)于來自運行時子系統(tǒng)MO的請求而創(chuàng)建和終止進程和線程。更具體而言,在一實施例中,運行時子系統(tǒng)240可以請求線程的執(zhí)行,并且會話核244可以向內(nèi)核218的可執(zhí)行程序發(fā)送請求以向線程分配存儲器以及執(zhí)行它們的調(diào)度時間。繼續(xù)對圖2的描述,在一實施例中,會話核244可以包括圖形顯示接口 M6 (⑶I) 和輸入子系統(tǒng)252。在一示例實施例中,輸入子系統(tǒng)252可以被配置為通過與該會話相關(guān)聯(lián)的協(xié)議棧實例接收來自客戶端201的用戶輸入并將該輸入傳送給會話核對4。在一些實施例中,用戶輸入可包括指示絕對和/或相對鼠標移動命令、鼠標坐標、鼠標點擊、鍵盤信號、 操縱桿移動信號等的信號。例如圖標上的鼠標雙擊的用戶輸入可被會話核244接收,并且輸入子系統(tǒng)252可被配置成確定圖標位于與該雙擊相關(guān)聯(lián)的坐標處。輸入子系統(tǒng)252隨后可被配置成向可執(zhí)行與該圖標相關(guān)聯(lián)的應(yīng)用的進程的運行時子系統(tǒng)240發(fā)送通知。除了接收來自客戶端201的輸入,繪制命令還可以從應(yīng)用和/或桌面接收并由GDI 246來處理。⑶I 246—般可包括能生成圖形對象繪制命令的進程。在該示例實施例中,⑶I 246可以被配置成將命令傳遞給遠程顯示子系統(tǒng)254,該遠程顯示子系統(tǒng)2M可以為會話實例化顯示驅(qū)動程序。在示例實施例中,遠程顯示子系統(tǒng)2M可以被配置成包括可不與物理上附加到服務(wù)器204的顯示器相關(guān)聯(lián)的虛擬顯示驅(qū)動程序,例如服務(wù)器204可無頭地運行。 在該實施例中,虛擬顯示驅(qū)動程序可以被配置為接收繪制命令并將它們通過與該會話相關(guān)聯(lián)的棧實例傳送給客戶端201。圖3示出了客戶端310和服務(wù)器302通過利用無拆分遠程顯示技術(shù)的遠程桌面協(xié)議(RDP)進行通信。在不存在無拆分遠程顯示技術(shù)的實施例中,服務(wù)器302執(zhí)行諸如視頻播放器之類的應(yīng)用306,并且通過包括RDP服務(wù)器304和RDP客戶端312的RDP會話將輸出發(fā)送給客戶端310。應(yīng)用306通過發(fā)出諸如圖形設(shè)備接口(⑶I)應(yīng)用306編程接口(API)命令之類的繪制命令來連續(xù)地向顯示器輸出。這可以利用從源位圖到目的地位圖的位塊傳輸(BitBlt) 來進行。然后,這些命令可以被翻譯成顯示驅(qū)動程序接口(DDI)調(diào)用(比如Win32 DDI調(diào)用),這些調(diào)用被分派給遠程桌面協(xié)議顯示驅(qū)動程序(RDPDD)。RDPDD將DDI調(diào)用編碼到RDP 繪制順序中。 RDP繪制順序放置到被與RDP服務(wù)器304的遠程桌面協(xié)議窗口驅(qū)動程序(RDPWD) 共享的存儲器中的“順序堆” 305中,該驅(qū)動程序充當通過TCP連接接收鍵盤和鼠標輸入并且將將其作為鍵盤或鼠標輸入來演示的鍵盤和鼠標驅(qū)動程序。RDPWD還允許創(chuàng)建虛擬通道, 該虛擬通道允許諸如盤、音頻、打印機和COM端口之類的其他設(shè)備被重定向,也就是說,所述通道充當這些設(shè)備的替代物。所述通道通過TCP連接在網(wǎng)絡(luò)308的范圍內(nèi)連接到客戶端 310,當所述通道被訪問以獲取數(shù)據(jù)時,向客戶端310通知請求,該請求然后通過TCP連接被傳輸給應(yīng)用306。該整個過程都是由終端服務(wù)器302和客戶端310來完成的,其中RDP協(xié)議對正確的傳輸進行中介,并且整個過程對應(yīng)用306而言是透明的。 然后,與連接到客戶端310的棧相關(guān)聯(lián)的RDPWD驅(qū)動程序從順序堆中提取繪制順序。該RDPWD對繪制順序進行批量壓縮,并且將其包裝在RDP傳輸結(jié)構(gòu)內(nèi),然后將其沿著棧
8向下發(fā)送給客戶端310。客戶端310接收RDP傳輸結(jié)構(gòu)中的這些繪制順序。其從RDP傳輸結(jié)構(gòu)中提取繪制順序,并且將其呈現(xiàn)給陰影緩沖器。當最多為預(yù)定數(shù)目的順序已經(jīng)被呈現(xiàn)給陰影緩沖器時, 陰影緩沖器的臟區(qū)域被復(fù)制到用戶可見的顯示表面。例如,如果順序的預(yù)定數(shù)目為25并且客戶端310接收包含M個順序的RDP分組, 則客戶端310將漸進地按照下列方式呈現(xiàn)給顯示表面。其將呈現(xiàn)第一批25個順序,然后其將呈現(xiàn)第二批25個順序,并且然后其將呈現(xiàn)剩余的4個順序。以該任意預(yù)定數(shù)目的順序(在此為25個)從陰影緩沖器314呈現(xiàn)給顯示表面 316(這對應(yīng)于顯示設(shè)備318上的輸出)可能導致用戶瞬時查看到不完整的圖像(拆分)。 該問題還將在每個順序立即被呈現(xiàn)到顯示表面的情況下持久存在。在具有無拆分技術(shù)的實施例中,在服務(wù)器302上執(zhí)行并且已經(jīng)具有被遠程顯示在客戶端310上的顯示輸出的應(yīng)用306可以指示RDPDD插入“開始”和“結(jié)束”幀標記。在這樣的實施例中,諸如視頻播放器之類的應(yīng)用306在服務(wù)器302上執(zhí)行。應(yīng)用 306通過應(yīng)用306編程接口(API)調(diào)用用信號向RDP服務(wù)器304的遠程桌面協(xié)議顯示驅(qū)動程序通知邏輯幀將被繪制。響應(yīng)于該調(diào)用,RDPDD將“開始”標記添加到順序堆305、即繪制順序被存儲以供處理的地方。應(yīng)用306通過發(fā)出⑶I繪制命令來繪制幀。⑶I命令被翻譯成顯示驅(qū)動程序接口(DDI)調(diào)用,所述調(diào)用被分派給RDP服務(wù)器304的RDPDD驅(qū)動程序。 RDP將DDI調(diào)用編碼到RDP繪制順序中。這些經(jīng)編碼的繪制順序被放置到與RDPWD驅(qū)動程序共享的存儲器中的順序堆305中,RDPDD將“結(jié)束”標記添加到順序堆305。與連接到客戶端310的棧相關(guān)聯(lián)的RDPWD驅(qū)動程序從共享的存儲器中提取繪制順序。繪制順序被批量壓縮并且包裝在RDP傳輸結(jié)構(gòu)內(nèi),并且在通信網(wǎng)絡(luò)308的范圍內(nèi)沿著棧向下被發(fā)送給客戶端 310。在另一實施例中,服務(wù)器302可以檢查所接收的經(jīng)編碼的繪制順序流并且在合適的地方放置“開始”和“結(jié)束”幀標記。在這樣的實施例中,諸如視頻播放器之類的應(yīng)用306在服務(wù)器302上執(zhí)行。應(yīng)用 306通過發(fā)出GDI繪制命令來影響其視覺顯示輸出。這些GDI命令被翻譯成DDI調(diào)用,所述調(diào)用接著被分派給RDP服務(wù)器306的RDPDD驅(qū)動程序。RDPDD將DDI回調(diào)編碼到RDP繪制順序中。編碼繪制順序被放置到與RDPWD驅(qū)動程序共享的存儲器中的順序堆305中?!癛DP 批處理引擎”對順序堆中的順序進行掃描以確定是否存在邏輯上相關(guān)的任何順序。任何相關(guān)的順序都被用“開始”和“結(jié)束”標記來包裝。與連接到客戶端310的棧相關(guān)聯(lián)的RDPWD 驅(qū)動程序從順序堆中提取繪制順序。該RDPWD驅(qū)動程序?qū)L制順序進行批量壓縮并且將其包裝在RDP傳輸結(jié)構(gòu)內(nèi),然后將它們在通信網(wǎng)絡(luò)308的范圍內(nèi)沿著棧向下發(fā)送給客戶端 310。客戶端310可以從下列實施例二者接收RDP傳輸結(jié)構(gòu)在服務(wù)器302上執(zhí)行并且具有遠程顯示在客戶端310上的顯示輸出的應(yīng)用306可以指示RDPDD插入“開始”和“結(jié)束” 幀標記的實施例;以及服務(wù)器302檢查所接收的經(jīng)編碼的繪制順序流并且在合適的地方放置“開始”和“結(jié)束”幀標記的實施例。當客戶端310接收到RDP傳輸結(jié)構(gòu)時,其從這些傳輸結(jié)構(gòu)中提取繪制順序。如果遇到“開始”標記,則被呈現(xiàn)給陰影緩沖器314的RDP流中的任何隨后的繪制順序都不被復(fù)制到顯示表面316以及由此的顯示設(shè)備318,直到遇到相應(yīng)的“結(jié)束”標記。如果未標識出 “開始”標記,則客戶端310可以使用現(xiàn)有圖形解碼流水線。圖4示出了用于服務(wù)器側(cè)無拆分遠程顯示的示例性操作過程。操作402描繪了確定順序堆中的至少兩個邏輯上相關(guān)的繪制順序,該邏輯上相關(guān)的繪制順序具有起始和結(jié)尾。在一實施例中,邏輯上相關(guān)的繪制順序是邏輯上相關(guān)的,因為圖像幀包括邏輯上相關(guān)的繪制順序。構(gòu)成圖像幀的繪制順序可以被聚集到一起,因為它們將被一起顯示。這些邏輯上相關(guān)的繪制順序的起始可以是將被執(zhí)行的第一個繪制順序,并且結(jié)尾可以是將被執(zhí)行的最后一個繪制順序。這可以對應(yīng)于矩形圖像的左上角和該矩形圖像的右下角。在一實施例中,邏輯上相關(guān)的繪制順序是邏輯上相關(guān)的,因為一個線程產(chǎn)生了每個在邏輯上相關(guān)的繪制順序。在多線程系統(tǒng)中,可以執(zhí)行多個進程。在每個進程都具有發(fā)出繪制順序的單線程的情況下,則可以確定來自不同線程的繪制順序不大可能在邏輯上相關(guān),而從一個線程發(fā)出的繪制順序很可能是邏輯上相關(guān)的。線程通常在兩個實例中切換。第一個是在線程自愿放棄其在處理器的輪次(turn) 時,因為其已經(jīng)完成了其任務(wù)。這通常發(fā)生在線程已經(jīng)完成了發(fā)出圖像幀的繪制順序的情況下。因此,在一實施例中,這可以用作表示由該線程在其輪次期間發(fā)出的所有繪制順序都是邏輯上相關(guān)的并且包括幀的指示,其中在其輪次的情況下,該線程在處理器上為活動的。 第二實例是在線程用完了其分配的在處理器上執(zhí)行的時間的情況下。在這種情況下,盡管很可能的是,由線程在該執(zhí)行時間段期間發(fā)出的每個繪制順序都是邏輯上相關(guān)的,但是也可能的是,由線程在其下次在處理器上執(zhí)行時發(fā)出的繪制順序也在邏輯上與該目前線程相關(guān)。在一實施例中,邏輯上相關(guān)的繪制順序的跨度為從線程在自愿放棄對處理器的使用以后下次重獲該使用時到其下次自愿放棄對處理器的使用為止。線程可以根據(jù)其線程ID(TID)來確定。在進程具有多個發(fā)出邏輯上相關(guān)的繪制順序的線程的情況下,可以使用與上面類似的技術(shù),并且進程可以根據(jù)其進程ID(PID)來區(qū)分。在一實施例中,邏輯上相關(guān)的繪制順序是邏輯上相關(guān)的,因為它們對應(yīng)于顯示的一部分。應(yīng)用窗口可以包括顯示表面的連貫區(qū)域。然后,可以確定與顯示表面的特定部分相對應(yīng)的這些順序全部都是由單個進程生成的并且因此是邏輯上相關(guān)的。在一實施例中,邏輯上相關(guān)的繪制順序是邏輯上相關(guān)的,因為它們是在相似時間發(fā)出的。一個幀的繪制順序通常在時間上彼此接近地被發(fā)出,從而使得更可能的是繪制順序與在遠離其的時間上發(fā)出的順序相比與在接近其的時間上發(fā)出的順序邏輯上相關(guān)。也可以確定當時間上居間的繪制順序在兩個繪制順序之間被發(fā)出時,這兩個繪制順序不是邏輯上相關(guān)的。在一實施例中,繪制順序包括應(yīng)用編程接口(API)調(diào)用,并且開始標記和結(jié)束標記每個都包括對API的調(diào)用。例如,在繪制順序通過調(diào)用圖形設(shè)備接口(DDI)應(yīng)用編程接口(API)而被發(fā)出的情況下,API可以被擴充為具有特殊的beginjiiarkerO(開始_標記 0)和encLmarkerO (結(jié)束_標記())函數(shù)調(diào)用,所述函數(shù)調(diào)用用于分別表示標記的開始和結(jié)束。在一實施例中,邏輯上相關(guān)的繪制順序是基于應(yīng)用類型而在邏輯上相關(guān)的。這可以用在僅有從相同應(yīng)用發(fā)出的繪制順序是邏輯上相關(guān)的情況下。操作404描繪了 通過在邏輯上相關(guān)的繪制順序的起始處放置開始標記以及在邏輯上相關(guān)的繪制順序的結(jié)尾處放置結(jié)束標記來包裝邏輯上相關(guān)的繪制順序。在一實施例中,該開始和結(jié)束由邏輯上相關(guān)的繪制順序所源自的應(yīng)用來確定。這樣的“感知”應(yīng)用可以被設(shè)計為跟蹤哪些繪制順序是邏輯上相關(guān)的,并且將對此的指示發(fā)送給插入開始和結(jié)束標記的組件。由于應(yīng)用很可能知道幀的大小,并且當特定幀正通過繪制順序被生成時,所存在的優(yōu)點是與一些之后做相同事情的組件具有僅僅一個繪制順序流來作出這些確定相比其標記邏輯上相關(guān)的繪制順序的效率。在一實施例中,應(yīng)用包裝邏輯上相關(guān)的繪制順序。應(yīng)用可以自己插入這些開始和結(jié)束標記,而不是發(fā)送表示開始和結(jié)束標記發(fā)生在何處的指示。例如,在這些標記如上述那樣包括API調(diào)用的情況下,應(yīng)用可以是發(fā)出這些beginjiiarkerO和endjiiarkerO調(diào)用的實體。在一實施例中,邏輯上相關(guān)的繪制順序?qū)?yīng)于具有已知起始和已知結(jié)尾的屏幕抓取,并且包裝邏輯上相關(guān)的繪制順序還包括將開始標記放置在已知起始處并且將結(jié)束標記放置在已知結(jié)尾處。屏幕抓取可以包括旨在用于顯示在顯示設(shè)備上的諸如位圖之類的圖像數(shù)據(jù)。其可以包括整個屏幕或其分部。通常,被“抓取”的圖像的大小是已知的,因此起始(在抓取為矩形的情況下通常為最左上方的像素)以及結(jié)尾(在該情況下通常為最右下方的像素)也是已知的,并且開始和結(jié)束標記于是可以合適地放置。在一實施例中,結(jié)束標記包括傳輸控制協(xié)議(TCP)轉(zhuǎn)儲清除(flush)命令。TCP轉(zhuǎn)儲清除命令可以是指示網(wǎng)絡(luò)協(xié)議棧的TCP層將所有當前持有的數(shù)據(jù)發(fā)送給該棧中的下一較低層以供在通信網(wǎng)絡(luò)的范圍內(nèi)傳輸。TCP轉(zhuǎn)儲清除命令通常包括0字節(jié)長度的空緩沖器。 在實體通過作出API調(diào)用來設(shè)置諸如上面的encLmarker ()調(diào)用之類的結(jié)束標記的情況下, 該調(diào)用可以用于將TCP轉(zhuǎn)儲清除命令插入到其位置處。操作406描繪了 在通信網(wǎng)絡(luò)的范圍內(nèi)向客戶端發(fā)送經(jīng)包裝的邏輯上相關(guān)的繪制順序、以及表示同時顯示所有邏輯上相關(guān)的繪制順序的指示。在一實施例中,經(jīng)包裝的邏輯上相關(guān)的繪制順序以分組在通信網(wǎng)絡(luò)的范圍內(nèi)發(fā)送,并且該分組在結(jié)束標記被插入到該分組中時被發(fā)送。在選擇在通信網(wǎng)絡(luò)內(nèi)發(fā)送的分組大小時應(yīng)考慮到效率。每個分組都包括報頭信息,因此發(fā)送具有小的有效載荷的一系列分組導致發(fā)送相對于元數(shù)據(jù)(報頭信息)而言的少量的數(shù)據(jù)(有效載荷)。然而,發(fā)送大分組導致分組在網(wǎng)絡(luò)控制路徑(比如線路、或者無線頻譜的一部分)上花費增加量的時間;導致其他一些設(shè)備將在該時間在該路徑上發(fā)送分組的機會增加;導致兩個分組都丟失并且必須重發(fā)的沖突。在該實施例中,所有在邏輯上相關(guān)的繪制順序都在單個分組中發(fā)送。這保證它們同時到達客戶端。在它們在多個分組中被發(fā)送的情況下,客戶端仍然將等待包含結(jié)束標記的最終分組,以顯示邏輯上相關(guān)的繪制順序。在一實施例中,分組具有最小的分組大小,還包括在結(jié)束標記在達到分組的最小分組大小時被插入到分組中時發(fā)送分組。當在邏輯上相關(guān)的繪制順序僅僅包括幾個繪制順序時,出于上面所討論的原因,發(fā)送這樣小的分組可能不是有效率的。在這種情況下,新的繪制順序可以添加到分組,直到達到最小分組大小,然后該分組被發(fā)送。在一實施例中,一旦第一結(jié)束標記在一旦已經(jīng)達到最小分組大小時就已經(jīng)被插入到分組中,就發(fā)送該分組。 在一實施例中,一旦第一結(jié)束標記在一旦已經(jīng)達到最小分組大小時就已經(jīng)被插入到分組中或者達到最大分組大小時,就發(fā)送該分組。在一實施例中,該分組通過多個協(xié)議層來發(fā)送,還包括在檢測到結(jié)束標記時由每個協(xié)議層將分組轉(zhuǎn)儲清除到通信網(wǎng)絡(luò)中。在一實施例中,網(wǎng)絡(luò)的協(xié)議層包括應(yīng)用層(例如超文本傳輸協(xié)議或者HTTP)、傳輸層(例如TCP)、因特網(wǎng)層(例如因特網(wǎng)協(xié)議或IP)、鏈路層 (例如以太網(wǎng))和物理層(例如RJ45/CAT5)。在這些層具有轉(zhuǎn)儲清除命令的情況下,結(jié)束標記可以為每個層包括轉(zhuǎn)儲清除命令,使得通過插入結(jié)束標記,分組通過所有層被轉(zhuǎn)儲清除, 并且在通信網(wǎng)絡(luò)的范圍內(nèi)被發(fā)送。在兩個層共享相同轉(zhuǎn)儲清除命令的實施例中,該命令不為每個層重復(fù)。在一實施例中,經(jīng)包裝的邏輯上相關(guān)的繪制順序根據(jù)遠程桌面協(xié)議(RDP)來發(fā)送。圖5示出了用于客戶端側(cè)無拆分遠程顯示的示例性操作過程。操作502描繪了在通信網(wǎng)絡(luò)的范圍內(nèi)接收顯示數(shù)據(jù)。在一實施例中,該數(shù)據(jù)作為由服務(wù)器發(fā)送的RDP分組來接收,這在操作306中予以了描繪。操作504描繪了將顯示數(shù)據(jù)存儲在陰影緩沖器中。在一實施例中,陰影緩沖器包括存儲器中的如下區(qū)域在該區(qū)域中,繪制命令被呈現(xiàn)給這些繪制命令的位圖表示。陰影緩沖器可以對應(yīng)于顯示緩沖器,在那里存在顯示在顯示設(shè)備上的數(shù)據(jù)。當陰影緩沖器中的數(shù)據(jù)將被顯示時,其然后被復(fù)制到顯示緩沖器,并且新數(shù)據(jù)可以被呈現(xiàn)給陰影緩沖器。在一實施例中,陰影緩沖器和顯示緩沖器存在于系統(tǒng)的視頻存儲器中。在一實施例中,顯示數(shù)據(jù)包括繪制命令。在另一實施例中,顯示數(shù)據(jù)包括諸如位圖之類的圖像。操作506描繪了確定顯示數(shù)據(jù)中的開始標記和結(jié)束標記。在顯示數(shù)據(jù)包括多個API形式的顯示命令的情況下,這可以包括標識出對應(yīng)于beginjiiarkerO和end_ marker ()的命令。操作508描繪了將開始標記與結(jié)束標記之間的所有顯示數(shù)據(jù)轉(zhuǎn)儲清除到顯示表面。在顯示表面對應(yīng)于顯示緩沖器的情況下,這可以包括將陰影緩沖器中的所有數(shù)據(jù)傳輸給顯示緩沖器。在陰影緩沖器中的數(shù)據(jù)是由該數(shù)據(jù)是否自其最近被移動到顯示緩沖器以來已經(jīng)被更新(比如具有臟位)來標識出的情況下,可能的是,僅僅陰影緩沖器的這些臟部分被復(fù)制到顯示緩沖器中。在一實施例中,存在定時器,并且轉(zhuǎn)儲清除所有顯示數(shù)據(jù)包括在定時器達到該定時器的期滿時轉(zhuǎn)儲清除開始標記與最近接收的顯示數(shù)據(jù)之間的所有顯示數(shù)據(jù),包括最近接收的顯示數(shù)據(jù)。在結(jié)束標記無論是在生成時還是在傳輸時被延遲的情況下,可能優(yōu)選的是, 在顯示表面上顯示一些新的顯示數(shù)據(jù),使得終端用戶不會發(fā)現(xiàn)會話無響應(yīng)或者認為會話已經(jīng)凍結(jié)。在這種情況下,每當顯示緩沖器被更新時,定時器都被復(fù)位,并且如果定時器應(yīng)當在接收到結(jié)束標記以前達到特定的時間,則其被轉(zhuǎn)儲清除到顯示表面。在定時器已經(jīng)期滿然后接收到結(jié)束標記的實施例中,操作于是可以在結(jié)束標記被確定時轉(zhuǎn)儲清除自從定時器達到期滿以來所接收到的所有顯示數(shù)據(jù)。結(jié)語盡管已經(jīng)結(jié)合各附圖所示的較佳方面描述了本發(fā)明,但要理解,可使用其它相似方面或者可對所述方面進行修改或添加來執(zhí)行本發(fā)明的相同功能而不脫離本發(fā)明。因此, 本發(fā)明不應(yīng)該僅限于任何單個方面,而是應(yīng)該在根據(jù)所附權(quán)利要求書的廣度和范圍內(nèi)解釋。例如,本文描述的各種過程可用硬件或軟件、或兩者的組合來實現(xiàn)。因此,所公開的各實施例的方法和裝置或其某些方面或部分可采用包含在諸如軟盤、CD-ROM、硬盤驅(qū)動器或任何其他機器可讀存儲介質(zhì)等有形介質(zhì)中的程序代碼(即,指令)的形式。當程序代碼被加載到諸如計算機等機器并由其執(zhí)行時,該機器變?yōu)楸慌渲贸蓪嵤┧_的各實施例的裝置。除了此處明確闡述的具體實現(xiàn)之外,考慮此處所公開的說明書,其它方面和實現(xiàn)將對本領(lǐng)域的技術(shù)人員是顯而易見的。說明書和所示實現(xiàn)旨在僅被認為是示例。
權(quán)利要求
1.一種用于減少客戶端上的應(yīng)用顯示中的拆分的方法,包括確定順序堆中的至少兩個邏輯上相關(guān)的繪制順序,所述邏輯上相關(guān)的繪制順序具有起始和結(jié)尾(402);通過在所述邏輯上相關(guān)的繪制順序的起始處放置開始標記以及在所述邏輯上相關(guān)的繪制順序的結(jié)尾處放置結(jié)束標記來包裝所述邏輯上相關(guān)的繪圖順序G04);在通信網(wǎng)絡(luò)的范圍內(nèi)向客戶端發(fā)送經(jīng)包裝的邏輯上相關(guān)的繪制順序、以及表示同時顯示所有所述邏輯上相關(guān)的繪制順序的指示(406)。
2.如權(quán)利要求1所述的方法,其特征在于,所述邏輯上相關(guān)的繪制順序是邏輯上相關(guān)的,因為圖像幀包括邏輯上相關(guān)的繪制順序。
3.如權(quán)利要求2所述的方法,其特征在于,所述邏輯上相關(guān)的繪制順序是邏輯上相關(guān)的,因為一個線程產(chǎn)生了每個邏輯上相關(guān)的繪制順序。
4.如權(quán)利要求2所述的方法,其特征在于,所述邏輯上相關(guān)的繪制順序是邏輯上相關(guān)的,因為它們對應(yīng)于顯示的一部分。
5.如權(quán)利要求2所述的方法,其特征在于,所述邏輯上相關(guān)的繪制順序是邏輯上相關(guān)的,因為它們是在相似時間發(fā)出的。
6.如權(quán)利要求1所述的方法,其特征在于,該起始和結(jié)尾由所述邏輯上相關(guān)的繪圖順序所源自的應(yīng)用來確定。
7.如權(quán)利要求6所述的方法,其特征在于,該應(yīng)用包裝所述邏輯上相關(guān)的繪制順序。
8.如權(quán)利要求1所述的方法,其特征在于,繪制順序包括應(yīng)用編程接口(API)調(diào)用,并且該開始標記和結(jié)束標記每個都包括對API的調(diào)用。
9.如權(quán)利要求1所述的方法,其特征在于,經(jīng)包裝的邏輯上相關(guān)的繪制順序以分組在通信網(wǎng)絡(luò)的范圍內(nèi)發(fā)送,還包括在結(jié)束標記被插入到該分組中時發(fā)送該分組。
10.如權(quán)利要求9所述的方法,其特征在于,分組具有最小分組大小,還包括 在結(jié)束標記在達到該分組的最小分組大小時被插入到該分組中時發(fā)送該分組。
11.如權(quán)利要求1所述的方法,其特征在于,該應(yīng)用具有一類型,還包括 所述邏輯上相關(guān)的繪制順序是基于該應(yīng)用類型而在邏輯上相關(guān)的。
12.一種用于減少應(yīng)用顯示中的拆分的系統(tǒng),該應(yīng)用顯示包括在通信網(wǎng)絡(luò)的范圍內(nèi)接收的顯示數(shù)據(jù),該系統(tǒng)包括用于在通信網(wǎng)絡(luò)的范圍內(nèi)接收顯示數(shù)據(jù)的電路(502);用于將顯示數(shù)據(jù)存儲在陰影緩沖器中的電路(504);用于確定顯示數(shù)據(jù)中的開始標記和結(jié)束標記的電路(506);以及用于將開始標記與結(jié)束標記之間的所有顯示數(shù)據(jù)轉(zhuǎn)儲清除到顯示表面的電路(508)。
13.如權(quán)利要求12所述的方法,其特征在于,所述系統(tǒng)還包括定時器,并且用于轉(zhuǎn)儲清除所有顯示數(shù)據(jù)的電路還在該定時器達到該定時器的期滿時轉(zhuǎn)儲清除開始標記與最近接收的顯示數(shù)據(jù)之間的所有顯示數(shù)據(jù),包括最近接收的顯示數(shù)據(jù)。
14.如權(quán)利要求13所述的方法,其特征在于,用于轉(zhuǎn)儲清除所有顯示數(shù)據(jù)的電路還 在結(jié)束標記被確定時轉(zhuǎn)儲清除自從該定時器達到期滿以來所接收到的所有顯示數(shù)據(jù)。
15.如權(quán)利要求12所述的方法,其特征在于,陰影緩沖器包括至少一個臟顯示數(shù)據(jù),并且用于轉(zhuǎn)儲清除的電路還僅僅轉(zhuǎn)儲清除所有臟顯示數(shù)據(jù)。
全文摘要
公開了用于減少在通信網(wǎng)絡(luò)的范圍內(nèi)接收的顯示數(shù)據(jù)的拆分的系統(tǒng)、方法和計算機可讀介質(zhì)。服務(wù)器確定順序堆中的至少兩個邏輯上相關(guān)的繪制順序,并且用開始標記和結(jié)束標記來包裝這些順序。其在通信網(wǎng)絡(luò)的范圍內(nèi)將這些經(jīng)包裝的順序發(fā)送給客戶端??蛻舳私邮者@些順序并且將其呈現(xiàn)給陰影緩沖器。當客戶端處理結(jié)束標記時,其將陰影緩沖器中的繪制順序移到客戶端顯示表面。
文檔編號G06F15/17GK102349063SQ201080012044
公開日2012年2月8日 申請日期2010年2月26日 優(yōu)先權(quán)日2009年3月9日
發(fā)明者E·索爾, N·Y·阿布多, V·A·阿爾布, W·R·舒米德爾 申請人:微軟公司