本申請(qǐng)涉及虛擬機(jī)領(lǐng)域,特別涉及一種在虛擬桌面基礎(chǔ)架構(gòu)(英文:virtualdesktopinfrastructure,縮寫:vdi)場(chǎng)景下用于人機(jī)接口設(shè)備(英文:humaninterfacedevice,縮寫:hid)的重定向的方法、裝置和系統(tǒng)。
背景技術(shù):
虛擬桌面技術(shù)是目前企業(yè)辦公環(huán)境的一種流行技術(shù),其將運(yùn)算和操作的執(zhí)行托管到了服務(wù)器,客戶設(shè)備在客戶設(shè)備只是實(shí)現(xiàn)桌面的顯示和捕獲用戶操作事件(如鍵盤、鼠標(biāo)事件)。通過服務(wù)器的管理系統(tǒng)能夠?qū)崿F(xiàn)對(duì)內(nèi)存資源和中央處理器(英文:centralprocessingunit,縮寫:cpu)的按需調(diào)度,有效的提高了內(nèi)存資源和cpu的使用效率。同時(shí),由于客戶設(shè)備只是實(shí)現(xiàn)顯示和捕獲用戶操作事件的功能,因此用戶可以在任意客戶設(shè)備上登錄服務(wù)器的同一臺(tái)虛擬機(jī),實(shí)現(xiàn)在任意地點(diǎn)對(duì)虛擬機(jī)的有效使用,大大提高了使用的便捷性。
在虛擬桌面技術(shù)的使用中,存在大量使用hid的場(chǎng)景,例如對(duì)hid進(jìn)行讀取操作。由于hid與客戶設(shè)備連接,而發(fā)起對(duì)hid的操作請(qǐng)求的虛擬機(jī)運(yùn)行于服務(wù)器上,因此需要將服務(wù)器上生成的hid的操作請(qǐng)求重定向至客戶設(shè)備。在對(duì)hid進(jìn)行重定向的過程中,需要將對(duì)hid的操作請(qǐng)求和從hid讀取的數(shù)據(jù)在客戶設(shè)備和服務(wù)器之間進(jìn)行傳遞?,F(xiàn)有技術(shù)中,服務(wù)器將hid的操作請(qǐng)求傳遞至客戶設(shè)備的過程中采用的方法對(duì)服務(wù)器與客戶設(shè)備之間的通信網(wǎng)絡(luò)的延遲敏感,降低了hid在使用中的可靠性。
技術(shù)實(shí)現(xiàn)要素:
本申請(qǐng)?zhí)峁┝艘环N重定向的方法、裝置和系統(tǒng),用于提升hid重定向的可靠性。
本申請(qǐng)第一方面提供了一種重定向的方法,所述方法用于vdi中對(duì)hid的重定向,其中,所述vdi包括服務(wù)器和客戶設(shè)備,所述客戶設(shè)備與所述hid連接,所述服務(wù)器上運(yùn)行有虛擬機(jī),該重定向方法包括:
所述虛擬機(jī)獲取接口調(diào)用請(qǐng)求,所述接口調(diào)用請(qǐng)求包括接口名和接口參數(shù);所述虛擬機(jī)對(duì)所述接口參數(shù)進(jìn)行序列化操作,獲取序列化結(jié)果;所述虛擬機(jī)生成數(shù)據(jù)包,并通過通信網(wǎng)絡(luò)將所述數(shù)據(jù)包發(fā)送至所述客戶設(shè)備,所述數(shù)據(jù)包包括所述接口名和所述序列化結(jié)果;所述客戶設(shè)備接收所述數(shù)據(jù)包,獲取所述序列化結(jié)果和所述接口名,對(duì)所述序列化結(jié)果進(jìn)行反序列化操作,獲取所述接口參數(shù);所述客戶設(shè)備根據(jù)所述接口參數(shù)和所述接口名訪問所述hid,獲取所述hid的信息,并將所述hid的信息發(fā)送至所述虛擬機(jī)。
所述客戶設(shè)備獲取所述接口參數(shù)和所述接口名,重構(gòu)所述虛擬機(jī)獲取的接口調(diào)用請(qǐng)求,也即將服務(wù)器上運(yùn)行的虛擬機(jī)中生成的接口調(diào)用請(qǐng)求重定向到了客戶設(shè)備上,客戶設(shè)備根據(jù)該接口調(diào)用請(qǐng)求獲取所述hid的信息,并將所述hid的信息發(fā)送至所述虛擬機(jī)。所述虛擬機(jī)將所述hid的信息返回給所述應(yīng)用程序。通過本申請(qǐng)實(shí)現(xiàn)的hid的重定向方法,提高了hid在使用過程中的穩(wěn)定性。
在一種可能的實(shí)現(xiàn)方式中,所述虛擬機(jī)對(duì)所述接口參數(shù)進(jìn)行序列化操作,獲取序列化結(jié)果包括:所述虛擬機(jī)根據(jù)所述接口參數(shù)的參數(shù)類型獲取所述接口參數(shù)對(duì)應(yīng)的底層數(shù)據(jù);所述客戶設(shè)備對(duì)所述序列化結(jié)果進(jìn)行反序列化操作,獲取所述接口參數(shù)包括:所述客戶設(shè)備根據(jù)所述接口參數(shù)對(duì)應(yīng)的底層數(shù)據(jù)獲取所述接口參數(shù)。
所述客戶設(shè)備獲取了接口名后,可以獲取該接口名對(duì)應(yīng)的輸入?yún)?shù)的參數(shù)類型,則獲取了該底層數(shù)據(jù)對(duì)應(yīng)的接口參數(shù)的參數(shù)類型,因此可以根據(jù)底層數(shù)據(jù)重構(gòu)該接口參數(shù)。
由于接口參數(shù)可能由多種數(shù)據(jù)結(jié)構(gòu)的嵌套而成,而接口參數(shù)對(duì)應(yīng)的底層數(shù)據(jù)存儲(chǔ)于服務(wù)器中的存儲(chǔ)設(shè)備,為了將接口調(diào)用請(qǐng)求重定向至所述客戶設(shè)備,需要將接口參數(shù)對(duì)應(yīng)的底層數(shù)據(jù)從所述服務(wù)器發(fā)送至所述客戶設(shè)備,以使得所述客戶設(shè)備能夠根據(jù)所述底層數(shù)據(jù)重構(gòu)接口參數(shù),實(shí)現(xiàn)hid的重定向過程。
本申請(qǐng)第二方面提供了一種重定向裝置,該裝置用于vdi中對(duì)hid的重定向,其中,所述vdi包括服務(wù)器和客戶設(shè)備,所述客戶設(shè)備與所述hid連接,該裝置包括:
接收模塊,用于接收所述服務(wù)器上運(yùn)行的應(yīng)用程序發(fā)出的接口調(diào)用請(qǐng)求,所述接口調(diào)用請(qǐng)求指示獲取hid的信息,所述接口調(diào)用請(qǐng)求包括接口名和接口參數(shù)。
序列化模塊,用于對(duì)接口參數(shù)進(jìn)行序列化操作,獲取序列化結(jié)果。
通信模塊,用于將所述接口名和所述序列化結(jié)果封裝為數(shù)據(jù)包,并通過通信網(wǎng)絡(luò)將所述數(shù)據(jù)包發(fā)送至客戶設(shè)備。該通信模塊獲取該數(shù)據(jù)包后,將該數(shù)據(jù)包發(fā)送至通信網(wǎng)絡(luò),該數(shù)據(jù)包中攜帶目的客戶設(shè)備的地址信息,以使得通信網(wǎng)絡(luò)能夠?qū)⒃摂?shù)據(jù)包路由至目的客戶設(shè)備。
該重定向裝置還用于將客戶設(shè)備訪問所述hid獲取的hid的信息返回給所述應(yīng)用程序。
該重定向裝置屬于該服務(wù)器,為該服務(wù)器中用于hid重定向的裝置。該裝置的接收模塊能夠截取該服務(wù)器上運(yùn)行的虛擬機(jī)使用的操作系統(tǒng)發(fā)出的接口調(diào)用請(qǐng)求。
該重定向裝置實(shí)現(xiàn)了將接口調(diào)用請(qǐng)求封裝入數(shù)據(jù)包發(fā)送至客戶設(shè)備,避免了在服務(wù)器上將接口調(diào)用請(qǐng)求轉(zhuǎn)換為多個(gè)指令后再傳輸至客戶設(shè)備對(duì)通信網(wǎng)絡(luò)造成的壓力,避免了通信網(wǎng)絡(luò)性能不足對(duì)hid重定向過程造成的影響。
在一種可能的實(shí)現(xiàn)方式中,所述序列化模塊具體用于根據(jù)所述接口參數(shù)的參數(shù)類型獲取所述接口參數(shù)對(duì)應(yīng)的底層數(shù)據(jù)。
本申請(qǐng)第三方面提供了一種重定向裝置,該裝置用于vdi中對(duì)hid的重定向,其中,所述vdi包括服務(wù)器和客戶設(shè)備,所述客戶設(shè)備與所述hid連接,該裝置包括:
通信模塊,用于接收數(shù)據(jù)包,并將該數(shù)據(jù)包包括的序列化結(jié)果和接口名發(fā)送至反序列化模塊。
反序列化模塊,用于獲取數(shù)據(jù)包中的序列化結(jié)果和接口名,以及對(duì)所述序列化結(jié)果進(jìn)行反序列化操作,獲取接口參數(shù)。
通信模塊,還用于根據(jù)所述接口參數(shù)和所述接口名,訪問所述hid,獲取所述hid的信息,并將所述hid的信息發(fā)送至所述虛擬機(jī)。
該通信模塊獲取了hid的信息后,將hid的信息封裝入數(shù)據(jù)包發(fā)送至通信網(wǎng)絡(luò),所述數(shù)據(jù)包中攜帶發(fā)出包括該序列化結(jié)果和接口名的數(shù)據(jù)包的目的 服務(wù)器的地址信息,以使得通信網(wǎng)絡(luò)能夠?qū)⒃摂?shù)據(jù)包路由至該目的服務(wù)器。
該重定向裝置屬于該客戶設(shè)備,為該客戶設(shè)備中用于hid重定向的裝置。該重定向裝置中的通信模塊能夠與通信網(wǎng)絡(luò)和hid進(jìn)行通信。在一種可能的實(shí)現(xiàn)方式中,所述反序列化模塊用于對(duì)所述序列化結(jié)果進(jìn)行反序列化操作,獲取接口參數(shù),具體包括:根據(jù)所述接口參數(shù)對(duì)應(yīng)的底層數(shù)據(jù)獲取所述接口參數(shù)。
本申請(qǐng)第四方面提供了一種服務(wù)器,包括:處理器以及存儲(chǔ)器,所述存儲(chǔ)器用于存儲(chǔ)指令,所述處理器用于執(zhí)行所述指令以執(zhí)行本申請(qǐng)第一方面及第一方面的任一中實(shí)現(xiàn)方式中提供的重定向方法中虛擬機(jī)側(cè)執(zhí)行的方法。
本申請(qǐng)第五方面提供了一種客戶設(shè)備,包括處理器以及存儲(chǔ)器,所述存儲(chǔ)器用于存儲(chǔ)指令,所述處理器用于執(zhí)行所述指令以執(zhí)行本申請(qǐng)第一方面及第一方面的任一中實(shí)現(xiàn)方式中提供的重定向方法中客戶設(shè)備側(cè)執(zhí)行的方法。
本申請(qǐng)第六方面提供了一種vdi,包括至少一個(gè)第四方面提供的服務(wù)器以及至少一個(gè)第五方面提供的的客戶設(shè)備,所述服務(wù)器和所述客戶設(shè)備之間通過通信網(wǎng)絡(luò)進(jìn)行通信。
本申請(qǐng)第七方面提供了一種存儲(chǔ)介質(zhì),該存儲(chǔ)介質(zhì)中存儲(chǔ)了程序代碼,該程序代碼被計(jì)算設(shè)備運(yùn)行時(shí),執(zhí)行第一方面或第一方面的任意一種實(shí)現(xiàn)方式提供的重定向方法。該存儲(chǔ)介質(zhì)包括但不限于快閃存儲(chǔ)器(英文:flashmemory),硬盤(英文:harddiskdrive,縮寫:hdd)或固態(tài)硬盤(英文:solidstatedrive,縮寫:ssd)。
本申請(qǐng)?zhí)峁┑募夹g(shù)方案,將服務(wù)器上運(yùn)行的虛擬機(jī)獲取的hid的接口調(diào)用請(qǐng)求進(jìn)行序列化操作之后發(fā)送至客戶設(shè)備,再由客戶設(shè)備將該接口調(diào)用請(qǐng)求解析為hid可以執(zhí)行的多個(gè)指令并根據(jù)這多個(gè)指令訪問hid,避免了服務(wù)器將接口調(diào)用請(qǐng)求解析后生成的多個(gè)指令發(fā)送至客戶設(shè)備造成的通信效率降低以及對(duì)通信網(wǎng)絡(luò)的延遲過于敏感造成的可靠性降低。
附圖說明
圖1為本申請(qǐng)所提供的vdi的示意圖;
圖2為本申請(qǐng)所提供的計(jì)算設(shè)備的一個(gè)實(shí)施例結(jié)構(gòu)示意圖;
圖3為本申請(qǐng)所提供的計(jì)算設(shè)備的另一實(shí)施例結(jié)構(gòu)示意圖;
圖4為本申請(qǐng)所提供的重定向的方法的一個(gè)實(shí)施例流程示意圖;
圖5為本申請(qǐng)所提供的一個(gè)應(yīng)用場(chǎng)景下重定向的方法的流程示意圖;
圖6為本申請(qǐng)所提供的另一應(yīng)用場(chǎng)景下重定向的方法的流程示意圖;
圖7為本申請(qǐng)所提供的重定向裝置的一個(gè)實(shí)施例結(jié)構(gòu)示意圖;
圖8為本申請(qǐng)所提供的重定向裝置的另一實(shí)施例結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面將結(jié)合本申請(qǐng)實(shí)施例中的附圖,對(duì)本申請(qǐng)實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本申請(qǐng)一部分實(shí)施例,而不是全部的實(shí)施例。基于本申請(qǐng)中的實(shí)施例,本領(lǐng)域技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本申請(qǐng)保護(hù)的范圍。
如圖1為本申請(qǐng)實(shí)施例所應(yīng)用的vdi的示意圖,該vdi包括服務(wù)器和客戶設(shè)備。
其中,服務(wù)器包括硬件層,即虛擬化環(huán)境運(yùn)行的硬件平臺(tái)。其中,硬件層可包括多種硬件,例如處理器(如cpu)和內(nèi)存、存儲(chǔ)設(shè)備(可以包括硬盤和/或內(nèi)存),還可以包括網(wǎng)卡等設(shè)備。
服務(wù)器上運(yùn)行有vm與虛擬機(jī)監(jiān)控器(英文:virtualmachinemonitor,縮寫:vmm)。通過虛擬機(jī)軟件可以在一臺(tái)服務(wù)器上模擬出一臺(tái)或者多臺(tái)vm,而這些vm就像真正的計(jì)算機(jī)那樣進(jìn)行工作,vm上可以安裝操作系統(tǒng)和應(yīng)用程序,vm還可訪問網(wǎng)絡(luò)資源。對(duì)于在vm中運(yùn)行的應(yīng)用程序而言,就像是在真正的計(jì)算機(jī)中進(jìn)行工作。vmm用于完成硬件層的管理、分配,為vm呈現(xiàn)虛擬硬件平臺(tái),實(shí)現(xiàn)vm的調(diào)度和隔離。其中,虛擬硬件平臺(tái)對(duì)其上運(yùn)行的各個(gè)vm提供各種硬件資源,如提供虛擬cpu、內(nèi)存、虛擬磁盤、虛擬網(wǎng)卡等等。
其中,客戶設(shè)備包括與服務(wù)器類似的硬件層,客戶設(shè)備的硬件層上運(yùn)行有操作系統(tǒng),該操作系統(tǒng)可以為服務(wù)器的vm上運(yùn)行的操作系統(tǒng)的裁剪版,在本申請(qǐng)的場(chǎng)景中,客戶設(shè)備上運(yùn)行的操作系統(tǒng)具有將接口調(diào)用請(qǐng)求轉(zhuǎn)換為hid可以識(shí)別的指令的功能。客戶設(shè)備也可以稱為瘦終端(英文:thinclient)。 客戶設(shè)備可以與一個(gè)或多個(gè)hid連接。
一臺(tái)服務(wù)器可以對(duì)應(yīng)一臺(tái)或多臺(tái)客戶設(shè)備。該服務(wù)器上運(yùn)行有一個(gè)或多個(gè)虛擬機(jī)(英文:virtualmachine,縮寫:vm),即vm-1至vm-n??蛻粼O(shè)備與hid連接,vm在運(yùn)行過程中,vm中運(yùn)行的應(yīng)用程序生成用于獲取hid的信息的接口調(diào)用請(qǐng)求,將該接口調(diào)用請(qǐng)求按照預(yù)先設(shè)計(jì)的協(xié)議或標(biāo)準(zhǔn),轉(zhuǎn)換為hid可以識(shí)別的指令,并將該轉(zhuǎn)換后的指令發(fā)送至hid,hid執(zhí)行該轉(zhuǎn)換后的指令以實(shí)現(xiàn)接口調(diào)用請(qǐng)求指示的操作。由于常見的hid與客戶設(shè)備通過通用串行總線(英文:universalserialbus,縮寫:usb)接口連接,因此預(yù)先設(shè)計(jì)的協(xié)議或標(biāo)準(zhǔn)也需要遵從usb協(xié)議。傳統(tǒng)的hid重定向過程中,服務(wù)器上運(yùn)行的vm執(zhí)行上述轉(zhuǎn)換動(dòng)作,再將轉(zhuǎn)換生成的多個(gè)符合usb協(xié)議的指令發(fā)送至客戶設(shè)備,客戶設(shè)備接收并執(zhí)行這些指令以實(shí)現(xiàn)對(duì)hid的操作。該過程中,由于這些指令數(shù)據(jù)量大且對(duì)客戶設(shè)備返回?cái)?shù)據(jù)的時(shí)延要求嚴(yán)格,因此現(xiàn)有的重定向方法對(duì)網(wǎng)絡(luò)延遲很敏感,導(dǎo)致hid在使用中的可靠性不足。
貫穿本說明書,hid包括各種與用戶交互的設(shè)備,例如鍵盤、鼠標(biāo)與游戲桿、打印機(jī)、讀卡器等。
貫穿本說明書,hid的信息包括hid的設(shè)備信息和hid獲取到的用戶信息中的一個(gè)或多個(gè)。其中,hid的設(shè)備信息為hid本身的硬件信息,例如hid的設(shè)備信息為產(chǎn)品id(英文:productid)和供應(yīng)商id(英文:vendorid)中的一個(gè)或多個(gè)。hid獲取到的用戶信息包括hid獲取到的用戶發(fā)送給hid的信息,例如hid獲取到的用戶信息為hid為鍵盤、打印機(jī)、鼠標(biāo)等設(shè)備時(shí),用戶通過對(duì)hid進(jìn)行的操作信息,hid獲取到的用戶信息還包括用戶安裝在hid上的其他存儲(chǔ)介質(zhì)傳輸給hid的信息,例如hid為讀卡器的場(chǎng)景下,hid的設(shè)備信息為讀卡器本身的設(shè)備信息,而hid獲取到的用戶信息為讀卡器上所安裝的存儲(chǔ)卡上攜帶的信息。
貫穿本說明書,設(shè)置(setup)接口為用于獲取hid的設(shè)備信息的操作系統(tǒng)接口,以vm上運(yùn)行windows操作系統(tǒng)為例,設(shè)置接口包括但不限于:setupdigetclassdevsa,setupdienumdeviceinterfaces,setupdigetdeviceinterfacedetaila,setupdidestroydeviceinfolist。
貫穿本說明書,hid接口為用于獲取hid獲取到的用戶信息的操作系統(tǒng)接口,以vm上運(yùn)行windows操作系統(tǒng)為例,設(shè)置接口包括但不限于:hidd_gethidguid,hidd_getproductstring,hidd_getmanufacturerstring,hidd_getpreparseddata,hidp_getcap,hidd_freepreparseddata,hidd_getattribute,hidd_gethidgui。
圖1中的服務(wù)器可以通過圖2中的計(jì)算設(shè)備200實(shí)現(xiàn)。該計(jì)算設(shè)備200的組織結(jié)構(gòu)示意圖如圖2所示,包括處理器202、存儲(chǔ)器204,還可以包括總線208、通信接口206。
其中,處理器202、存儲(chǔ)器204和通信接口206可以通過總線208實(shí)現(xiàn)彼此之間的通信連接,也可以通過無線傳輸?shù)绕渌侄螌?shí)現(xiàn)通信。
存儲(chǔ)器204可以包括易失性存儲(chǔ)器(英文:volatilememory),例如隨機(jī)存取存儲(chǔ)器(英文:random-accessmemory,縮寫:ram);存儲(chǔ)器204也可以包括非易失性存儲(chǔ)器(英文:non-volatilememory),例如只讀存儲(chǔ)器(英文:read-onlymemory,縮寫:rom),快閃存儲(chǔ)器(英文:flashmemory),硬盤(英文:harddiskdrive,縮寫:hdd)或固態(tài)硬盤(英文:solidstatedrive,縮寫:ssd);存儲(chǔ)器204還可以包括上述種類的存儲(chǔ)器的組合。在通過軟件來實(shí)現(xiàn)本申請(qǐng)?zhí)峁┑募夹g(shù)方案時(shí),用于實(shí)現(xiàn)本申請(qǐng)圖4提供的重定向的方法中服務(wù)器側(cè)執(zhí)行的部分的程序代碼保存在存儲(chǔ)器204中,并由處理器202來執(zhí)行。
計(jì)算設(shè)備200通過通信接口206與客戶設(shè)備通信。
處理器202可以為cpu。
該處理器202運(yùn)行時(shí)執(zhí)行以下操作:接收應(yīng)用程序發(fā)出的接口調(diào)用請(qǐng)求,該接口調(diào)用請(qǐng)求包括接口參數(shù)和接口名,并對(duì)所述接口參數(shù)進(jìn)行序列化操作,獲取序列化結(jié)果;隨后將所述接口名和所述序列化結(jié)果封裝為數(shù)據(jù)包,并通過通信接口206將所述數(shù)據(jù)包發(fā)送至客戶設(shè)備。
通信接口206獲取所述客戶設(shè)備根據(jù)所述接口調(diào)用請(qǐng)求訪問所述hid獲取的hid的信息后,處理器202還用于將所述hid的信息返回給所述應(yīng)用程序。
圖1中的客戶設(shè)備可以通過圖3中的計(jì)算設(shè)備300實(shí)現(xiàn)。該計(jì)算設(shè)備300的組織結(jié)構(gòu)示意圖如圖3所示,包括處理器302、存儲(chǔ)器304,還可以包括總 線308、通信接口306。
其中,處理器302、存儲(chǔ)器304和通信接口306可以通過總線308實(shí)現(xiàn)彼此之間的通信連接,也可以通過無線傳輸?shù)绕渌侄螌?shí)現(xiàn)通信。
處理器302可以為cpu。存儲(chǔ)器304可以包括易失性存儲(chǔ)器,例如ram;存儲(chǔ)器304也可以包括非易失性存儲(chǔ)器,例如rom,快閃存儲(chǔ)器,hdd或ssd;存儲(chǔ)器304還可以包括上述種類的存儲(chǔ)器的組合。在通過軟件來實(shí)現(xiàn)本申請(qǐng)?zhí)峁┑募夹g(shù)方案時(shí),用于實(shí)現(xiàn)本申請(qǐng)圖4提供的重定向的方法中客戶設(shè)備側(cè)的部分的程序代碼保存在存儲(chǔ)器304中,并由處理器302來執(zhí)行。計(jì)算設(shè)備300通過通信接口306與服務(wù)器通信。
通信接口306接收服務(wù)器發(fā)來的數(shù)據(jù)包后,獲取所述數(shù)據(jù)包中包括的序列化結(jié)果和接口名,并將所述序列化結(jié)果和接口名發(fā)送至處理器302。
該處理器302運(yùn)行時(shí)執(zhí)行以下操作:獲取所述數(shù)據(jù)包中的序列化結(jié)果和接口名,并對(duì)所述序列化結(jié)果進(jìn)行反序列化操作,獲取接口參數(shù);根據(jù)接口參數(shù)和所述接口名,訪問hid,獲取hid的信息,并將hid的信息通過通信接口306發(fā)送至發(fā)送包括了該序列化結(jié)果的數(shù)據(jù)包的服務(wù)器。
基于圖1所示的vdi,本申請(qǐng)?zhí)峁┝艘环N重定向方法,圖1中的服務(wù)器和客戶設(shè)備運(yùn)行時(shí)執(zhí)行該方法,其流程示意圖如圖4所示。
401、虛擬機(jī)獲取接口調(diào)用請(qǐng)求,所述接口調(diào)用請(qǐng)求包括接口名和接口參數(shù)。
所述接口調(diào)用請(qǐng)求指示獲取hid的信息,虛擬機(jī)上運(yùn)行的應(yīng)用程序在需要對(duì)hid進(jìn)行操作的時(shí)候,調(diào)用對(duì)應(yīng)的接口調(diào)用請(qǐng)求,虛擬機(jī)截獲該接口調(diào)用請(qǐng)求。實(shí)踐中可以通過一個(gè)鉤子模塊實(shí)現(xiàn)對(duì)應(yīng)用程序發(fā)出的接口調(diào)用請(qǐng)求的截獲。
可選的,所述接口名為設(shè)置接口,所述hid的信息為所述hid的設(shè)備信息。
可選的,所述接口為hid接口,所述hid的信息為所述hid獲取到的用戶信息。
402、所述虛擬機(jī)對(duì)所述接口參數(shù)進(jìn)行序列化操作,獲取序列化結(jié)果。
可選的,所述虛擬機(jī)對(duì)所述接口參數(shù)進(jìn)行序列化操作,獲取序列化結(jié)果 具體包括:所述虛擬機(jī)根據(jù)所述接口參數(shù)的參數(shù)類型獲取所述接口參數(shù)對(duì)應(yīng)的底層數(shù)據(jù)。
403、所述虛擬機(jī)將所述接口名和所述序列化結(jié)果封裝為數(shù)據(jù)包,并通過通信網(wǎng)絡(luò)將所述數(shù)據(jù)包發(fā)送至客戶設(shè)備。
404、所述客戶設(shè)備接收所述數(shù)據(jù)包,獲取所述序列化結(jié)果和所述接口名,對(duì)所述序列化操作進(jìn)行反序列化操作,獲取所述接口參數(shù)。
可選的,所述客戶設(shè)備對(duì)所述序列化操作進(jìn)行反序列化操作,獲取所述接口參數(shù)包括:所述客戶設(shè)備根據(jù)所述接口參數(shù)對(duì)應(yīng)的底層數(shù)據(jù)獲取所述接口參數(shù)。
需要說明的是,接口參數(shù)可以為各種數(shù)據(jù)結(jié)構(gòu)或數(shù)據(jù)類型,例如變量類型(例如數(shù)值或者枚舉類型)、間接訪問類型(例如指針或指針的指針)、句柄。不同類型的接口參數(shù)可以作為不同接口調(diào)用請(qǐng)求的接口參數(shù),例如windows下接口名為hidd_getpreparseddata的接口調(diào)用請(qǐng)求的接口參數(shù)為hiddeviceobject以及*preparseddata。
序列化操作過程中,由于需要將接口參數(shù)轉(zhuǎn)換為字節(jié)序列以便將該接口參數(shù)通過通信網(wǎng)絡(luò)傳輸,因此需要獲取該接口參數(shù)對(duì)應(yīng)的底層數(shù)據(jù)對(duì)應(yīng)的字節(jié)序列。例如待處理的接口參數(shù)為指針a,則序列化操作過程中需要獲取指針a指向的變量b,則變量b為指針a的底層數(shù)據(jù)。例如待處理的接口參數(shù)為指針的指針c,則需要獲取指針的指針c指示的指針d,然后獲取指針d指向的變量e,則變量e為指針的指針c的底層數(shù)據(jù)。不同的接口參數(shù)的序列化操作過程中獲取的底層數(shù)據(jù)的類型可能不同,但根據(jù)其底層數(shù)據(jù)可以恢復(fù)出原接口參數(shù),例如如果原接口參數(shù)為一個(gè)句柄,則通過對(duì)該接口參數(shù)的底層數(shù)據(jù)進(jìn)行反序列化操作可以獲得一個(gè)句柄。實(shí)際中,還會(huì)出現(xiàn)待處理的接口參數(shù)有更多種類型,例如多重指針嵌套、多重句柄嵌套等。vm發(fā)出的接口調(diào)用請(qǐng)求的接口參數(shù)對(duì)應(yīng)的底層數(shù)據(jù),在服務(wù)器的存儲(chǔ)空間中一般指示一段連續(xù)的內(nèi)存值。
反序列化操作過程包括根據(jù)底層數(shù)據(jù),重構(gòu)該底層數(shù)據(jù)對(duì)應(yīng)的接口參數(shù)。例如底層數(shù)據(jù)包括變量b,則重構(gòu)指針a’,指針a’指向變量b??蛻粼O(shè)備在獲取了接口名后,即可根據(jù)接口名獲取該接口名對(duì)應(yīng)的輸入?yún)?shù)的類型,例 如windows下接口名為hidd_getpreparseddata的接口調(diào)用請(qǐng)求的接口參數(shù)包括*preparseddata,因此如果客戶設(shè)備在獲取包括接口名hidd_getpreparseddata的數(shù)據(jù)包后,則可以得知該接口名對(duì)應(yīng)的輸入?yún)?shù)包括一個(gè)指針,因此客戶設(shè)備根據(jù)該數(shù)據(jù)包中攜帶的底層數(shù)據(jù),重構(gòu)一個(gè)指針作為hidd_getpreparseddata接口的輸入?yún)?shù)。
序列化操作和反序列化操作常用于通過通信網(wǎng)絡(luò)在不同設(shè)備間傳遞數(shù)據(jù),以在圖1所示的vdi中實(shí)現(xiàn)hid的重定向過程為例。服務(wù)器上運(yùn)行的vm在運(yùn)行應(yīng)用程序的過程中,應(yīng)用程序發(fā)起接口調(diào)用請(qǐng)求,該接口調(diào)用請(qǐng)求包括了應(yīng)用程序需要調(diào)用的接口的接口名以及該接口的接口參數(shù),服務(wù)器需要對(duì)接口調(diào)用請(qǐng)求進(jìn)行序列化操作,使得接口調(diào)用請(qǐng)求能夠通過數(shù)據(jù)包傳送至客戶設(shè)備,并且客戶設(shè)備能夠根據(jù)服務(wù)器發(fā)來的數(shù)據(jù)包重構(gòu)該接口調(diào)用請(qǐng)求,以使得服務(wù)器的vm發(fā)起的針對(duì)hid的操作請(qǐng)求,能夠重定向至客戶設(shè)備。
405、所述客戶設(shè)備根據(jù)所述接口參數(shù)和所述接口名訪問所述hid,獲取所述hid的信息。
406、所述客戶設(shè)備將所述hid的信息發(fā)送至所述虛擬機(jī)。
客戶設(shè)備根據(jù)獲取的該接口參數(shù)和接口名重構(gòu)該接口調(diào)用請(qǐng)求,客戶設(shè)備上運(yùn)行的操作系統(tǒng)將該接口調(diào)用請(qǐng)求轉(zhuǎn)換為hid能夠執(zhí)行的多個(gè)指令,通過這些指令去訪問hid,以獲取hid的信息。
服務(wù)器獲取了該hid的信息后,將該hid的信息返回給發(fā)出該接口調(diào)用請(qǐng)求的應(yīng)用程序。
本申請(qǐng)?zhí)峁┑膆id重定向方法,通過將服務(wù)器獲取的接口參數(shù)對(duì)應(yīng)的序列化結(jié)果和接口名通過數(shù)據(jù)包發(fā)送至客戶設(shè)備,再由客戶設(shè)備重構(gòu)接口調(diào)用請(qǐng)求并對(duì)hid進(jìn)行訪問,避免了現(xiàn)有技術(shù)中需要將接口調(diào)用請(qǐng)求轉(zhuǎn)換后的多個(gè)指令在通信網(wǎng)絡(luò)中傳輸造成的可靠性降低,本申請(qǐng)?zhí)峁┑膆id重定向方法對(duì)網(wǎng)絡(luò)延時(shí)要求低,穩(wěn)定性好。
下面以具體實(shí)例對(duì)本申請(qǐng)?zhí)峁┑闹囟ㄏ虻姆椒ㄟM(jìn)行說明。如圖5所示,以服務(wù)器上運(yùn)行的虛擬機(jī)中的讀卡模塊進(jìn)行讀卡操作為例。該方法基于圖5的系統(tǒng)實(shí)現(xiàn),該系統(tǒng)包括讀卡器、客戶設(shè)備和服務(wù)器,該客戶設(shè)備包括序列 化模塊、通信模塊和反序列化模塊,該服務(wù)器上運(yùn)行有虛擬機(jī),虛擬機(jī)包括序列化模塊、通信模塊、反序列化模塊、讀卡模塊以及接收模塊。該方法包括:
步驟1,該讀卡模塊向操作系統(tǒng)發(fā)起設(shè)置接口的調(diào)用請(qǐng)求,用于讀取讀卡器的設(shè)備信息。
步驟2,接收模塊接收該讀卡模塊發(fā)出的設(shè)置接口的調(diào)用請(qǐng)求。
可選地,該接收模塊可以為一個(gè)鉤子(hook)模塊。
步驟3,接收模塊將設(shè)置接口的接口參數(shù)傳遞給服務(wù)器的序列化模塊處理。
步驟4,服務(wù)器的序列化模塊對(duì)設(shè)置接口的接口參數(shù)進(jìn)行序列化后,將設(shè)置接口的接口參數(shù)的序列化結(jié)果和接口名發(fā)送至服務(wù)器的通信模塊。
步驟5,服務(wù)器的通信模塊將接口名以及設(shè)置接口的接口參數(shù)的序列化結(jié)果封裝為數(shù)據(jù)包后發(fā)送給客戶設(shè)備。
步驟6,客戶設(shè)備的反序列化模塊對(duì)設(shè)置接口的接口參數(shù)的序列化結(jié)果進(jìn)行反序列化。
步驟7,客戶設(shè)備的通信模塊根據(jù)反序列化得到的設(shè)置接口的接口參數(shù)以及接口名,通過客戶設(shè)備上運(yùn)行的操作系統(tǒng)執(zhí)行該設(shè)置接口的調(diào)用請(qǐng)求讀取讀卡器的設(shè)備信息。
步驟8,客戶設(shè)備的通信模塊將讀到的讀卡器的設(shè)備信息發(fā)送至客戶端的序列化模塊。
步驟9,客戶設(shè)備的序列化模塊將讀卡器的設(shè)備信息序列化后發(fā)送到通信模塊。
步驟10,客戶設(shè)備的通信模塊將序列化后的該讀卡器的設(shè)備信息發(fā)送到服務(wù)器。
步驟11,服務(wù)器的反序列化模塊處理該序列化后的讀卡器的設(shè)備信息后獲取讀卡器的設(shè)備信息,反序列化模塊將讀卡器的設(shè)備信息返回給讀卡模塊。
步驟12,讀卡模塊發(fā)起hid接口調(diào)用,以讀取讀卡器上的存儲(chǔ)卡內(nèi)的信息。
步驟13,接收模塊接收該讀卡模塊發(fā)出的hid接口的調(diào)用請(qǐng)求,并將hid接口的接口參數(shù)傳遞給服務(wù)器的序列化模塊進(jìn)行處理。
步驟14,服務(wù)器的序列化模塊對(duì)hid接口的接口參數(shù)進(jìn)行序列化后獲取hid接口的接口參數(shù)的序列化結(jié)果,通過服務(wù)器的通信模塊將hid接口的接口名以及hid接口的接口參數(shù)的序列化結(jié)果封裝為數(shù)據(jù)包后發(fā)送給客戶設(shè)備??蛻粼O(shè)備的反序列化模塊對(duì)收到的hid接口的接口參數(shù)的序列化結(jié)果進(jìn)行反序列化。
步驟15,客戶設(shè)備的通信模塊根據(jù)獲取的hid接口的接口名和反序列化得到的hid接口的接口參數(shù)讀取存儲(chǔ)卡內(nèi)的信息。獲取的存儲(chǔ)卡內(nèi)的信息經(jīng)過客戶設(shè)備的序列化模塊處理后,獲取序列化后的存儲(chǔ)卡內(nèi)的信息,通過通過客戶設(shè)備的通信模塊發(fā)送到服務(wù)器。
步驟16,服務(wù)器上的反序列化模塊將序列化后的存儲(chǔ)卡內(nèi)的信息反序列化后,將存儲(chǔ)卡內(nèi)的信息返回給虛擬機(jī)中運(yùn)行的讀卡模塊。
步驟17,讀卡模塊獲取存儲(chǔ)卡內(nèi)的信息。
服務(wù)器上的序列化模塊和反序列化模塊在實(shí)踐中可以由同一模塊實(shí)現(xiàn)序列化和反序列化的功能,客戶設(shè)備上的序列化模塊和反序列化模塊與之類似。服務(wù)器上的序列化模塊與客戶設(shè)備上的序列化模塊功能類似,服務(wù)器上的反序列化模塊與客戶設(shè)備上的反序列化模塊功能類似。
如圖6所示,以用戶通過身份信息進(jìn)行虛擬機(jī)登陸的身份驗(yàn)證的應(yīng)用場(chǎng)景為例進(jìn)行說明本申請(qǐng)?zhí)峁┑闹囟ㄏ虻姆椒?。該方法基于圖6的系統(tǒng)實(shí)現(xiàn),該系統(tǒng)包括hid、客戶設(shè)備、服務(wù)器和鑒權(quán)服務(wù)器。該客戶設(shè)備包括重定向模塊和遠(yuǎn)程協(xié)議客戶端,其中重定向模塊包括序列化模塊、通信模塊、反序列化模塊。該服務(wù)器上運(yùn)行有虛擬機(jī),虛擬機(jī)包括遠(yuǎn)程協(xié)議登錄模塊和重定向模塊,其中重定向模塊序列化模塊、通信模塊、反序列化模塊以及接收模塊。鑒權(quán)服務(wù)器包括遠(yuǎn)程協(xié)議鑒權(quán)模塊,鑒權(quán)服務(wù)器還可以包括用于通信的通信模塊。該方法包括:
步驟1,用戶通過客戶設(shè)備中的遠(yuǎn)程協(xié)議客戶端向服務(wù)器發(fā)起虛擬機(jī)的登錄請(qǐng)求。
步驟2,服務(wù)器的遠(yuǎn)程協(xié)議登錄模塊獲取該虛擬機(jī)的登錄請(qǐng)求。
步驟3,服務(wù)器根據(jù)該虛擬機(jī)的登錄請(qǐng)求發(fā)起設(shè)置接口以及hid接口的調(diào)用請(qǐng)求,并通過重定向模塊將接口調(diào)用請(qǐng)求重定向至客戶設(shè)備,以讀取用戶的身份信息。接口調(diào)用請(qǐng)求的重定向過程,基于本申請(qǐng)前述實(shí)施例所提供的重定向的方法實(shí)現(xiàn)。
該服務(wù)器的重定向模塊包括實(shí)現(xiàn)了圖4所示實(shí)施例中服務(wù)器側(cè)方法的軟件模塊,重定向模塊中的各個(gè)子模塊參考圖5所示的實(shí)施例。該客戶設(shè)備的重定向模塊包括實(shí)現(xiàn)了圖4所示實(shí)施例中客戶設(shè)備側(cè)方法的軟件模塊,重定向模塊中的各個(gè)子模塊參考圖5所示的實(shí)施例。
步驟4,客戶設(shè)備的重定向模塊獲取用戶的身份信息,并將用戶的身份信息返回給服務(wù)器。
步驟5,服務(wù)器的重定向模塊獲取用戶的身份信息,將用戶的身份信息傳遞給遠(yuǎn)程協(xié)議登錄模塊。遠(yuǎn)程協(xié)議登錄模塊根據(jù)用戶的身份信息向鑒權(quán)服務(wù)器發(fā)起鑒權(quán)請(qǐng)求。
步驟6,鑒權(quán)服務(wù)器在獲得鑒權(quán)請(qǐng)求后,通過遠(yuǎn)程協(xié)議鑒權(quán)模塊對(duì)用戶的身份信息進(jìn)行鑒權(quán)。如果鑒權(quán)成功,則向遠(yuǎn)程協(xié)議登錄模塊返回虛擬機(jī)登錄信息。
步驟7,遠(yuǎn)程協(xié)議登錄模塊在獲得虛擬機(jī)登錄信息后,利用虛擬機(jī)登錄信息登錄虛擬機(jī),并向客戶設(shè)備返回登錄結(jié)果。
用戶可以選用不同的身份信息進(jìn)行虛擬機(jī)登陸的身份驗(yàn)證(例如:賬號(hào)/密碼,指紋,智能卡等),而登錄虛擬機(jī)之前需要通過對(duì)用戶的身份信息的鑒權(quán)。通過以上提供的方法,能夠更可靠地實(shí)現(xiàn)服務(wù)器與虛擬機(jī)之間的接口調(diào)用請(qǐng)求的重定向,實(shí)現(xiàn)用戶的身份信息的鑒權(quán),提升用戶的體驗(yàn)。
本申請(qǐng)實(shí)施例還提供了重定向裝置500,該裝置可以通過圖2所示的計(jì)算設(shè)備200實(shí)現(xiàn),還可以通過專用集成電路(英文:application-specificintegratedcircuit,縮寫:asic)實(shí)現(xiàn),或可編程邏輯器件(英文:programmablelogicdevice,縮寫:pld)實(shí)現(xiàn)。上述pld可以是復(fù)雜可編程邏輯器件(英文:complexprogrammablelogicdevice,縮寫:cpld),fpga,通用陣列邏輯(英文:genericarraylogic,縮寫:gal)或其任意組合。該重定向裝置500用于實(shí)現(xiàn)圖4所示的重定向的方法中服務(wù)器側(cè)執(zhí)行的方法。通過軟件實(shí)現(xiàn)圖4所示的重定向 的方法時(shí),該重定向裝置500及其包括的各個(gè)也可以為軟件模塊。
重定向裝置500的組織結(jié)構(gòu)示意圖如圖7所示,包括:接收模塊501、序列化模塊502和通信模塊503。接收模塊501工作時(shí),執(zhí)行圖4所示的重定向的方法中的步驟401,序列化模塊502工作時(shí),執(zhí)行圖4所示的重定向的方法中的步驟402,通信模塊503工作時(shí),執(zhí)行圖4所示的重定向的方法中的步驟403。
本申請(qǐng)實(shí)施例還提供了重定向裝置600,該裝置可以通過圖3所示的計(jì)算設(shè)備300實(shí)現(xiàn),還可以通過asic實(shí)現(xiàn),或pld實(shí)現(xiàn)。上述pld可以是復(fù)雜可編程cpld,fpga,gal或其任意組合。該重定向裝置600用于實(shí)現(xiàn)圖4所示的重定向的方法中客戶設(shè)備側(cè)執(zhí)行的方法。通過軟件實(shí)現(xiàn)圖4所示的重定向的方法時(shí),重定向裝置600及其包括的各個(gè)模塊也可以為軟件模塊。
重定向裝置600的組織結(jié)構(gòu)示意圖如圖8所示,包括:反序列化模塊601和通信模塊602。反序列化模塊601工作時(shí),執(zhí)行圖4所示的重定向的方法中的步驟404,通信模塊602工作時(shí),執(zhí)行圖4所示的重定向的方法中的步驟404中接收數(shù)據(jù)包的動(dòng)作以及步驟405和步驟406。
上述裝置的相關(guān)描述可以對(duì)應(yīng)參閱方法實(shí)施例部分的相關(guān)描述和效果進(jìn)行理解,本處不做過多贅述。
本申請(qǐng)還提供了一種vdi,其組織結(jié)構(gòu)示意圖如圖1所示,其由至少一個(gè)服務(wù)器與至少一個(gè)客戶設(shè)備構(gòu)成。
所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡(jiǎn)潔,上述描述的系統(tǒng),裝置和單元的具體工作過程,可以參考前述方法實(shí)施例中的對(duì)應(yīng)過程,在此不再贅述。
在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的系統(tǒng),裝置和方法,可以通過其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合 或通信連接,可以是電性,機(jī)械或其它的形式。
另外,在本申請(qǐng)各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。
以上所述,以上實(shí)施例僅用以說明本申請(qǐng)的技術(shù)方案,而非對(duì)其限制;盡管參照前述實(shí)施例對(duì)本申請(qǐng)進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本申請(qǐng)各實(shí)施例技術(shù)方案的范圍。