具体实施方式
本发明用于在虚拟应用环境下提供更多的应用,提高运行效率,进一步改善用户体验。该虚拟应用环境可包括:Citrix和微软的应用虚拟化环境。
本发明公开了一种在虚拟应用环境下改善用户体验的方法,具体涉及的是一种降低虚拟应用程序输入文本后显示时延的方法,用于解决现有技术中,由于在客户端的用户界面每输入一个字符都需要先连接服务器端而带来的客户端的显示滞后,降低用户体验满意度的问题。
请参阅图1A所示为一种在虚拟应用环境下改善用户体验的方法的流程图。
步骤101,当用户在该客户端输入字符,该客户端拦截该字符;
步骤102,该客户端缓存该字符,并且,该客户端的用户显示界面实时显示该字符;
步骤103,该客户端将用户此次输入所缓存的所有字符通过客户端与服务器端间的虚拟通道发送至该服务器端;
步骤104,该服务器端根据接收到的字符产生用户显示界面的更新信息,该更新信息被发送至该客户端;
步骤105,该客户端根据该更新信息更新用户显示界面。
请参阅图1B所示为本发明的虚拟应用系统的结构示意图,特别是字符输入操作体验本地化子系统的结构示意图,用于执行上述方法。
虚拟应用系统10具有客户端1以及服务器端2。客户端1的应用层加载有虚拟应用程序11、拦截模块12、缓存模块13以及本地化交互通道管理器14。客户端1的驱动层中设置有键盘驱动15。服务器端2可设置在一应用服务器中。服务器端2的应用层中设置有本地化交互通道服务模块21,被虚拟的应用程序22以及服务器端处理单元23。
本地化交互通道管理器14与本地化交互通道服务模块21配合使用,以实现客户端1以及服务器端2间的虚拟通道。
服务器端2加载有该被虚拟的应用程序22,根据现有技术可知,被虚拟的应用程序22的用户界面发送到客户端1的虚拟应用程序11,由虚拟应用程序11绘制并展现出被虚拟的应用程序22的用户界面。用户可在该用户界面进行操作,输入字符。
以下结合图1B具体介绍上述方法的实现过程。
服务器端2加载被虚拟的应用程序22,将被虚拟的应用程序22的用户界面发送到客户端的虚拟应用程序11,由虚拟应用程序11绘制并在显示模块中展现出被虚拟的应用程序22的用户界面,该用户界面中包括一文本输入框。
步骤101具体包括:用户在客户端1的文本输入框中输入字符,该字符的输入可以通过敲击客户端的键盘或虚拟软键盘的方式实现。键盘被敲击后产生硬件中断,键盘驱动15获得对应所输入字符的键盘扫描码。
该客户端在收到用户的输入动作所对应的键盘扫描码后,调用拦截模块12,该拦截模块12拦截该键盘扫描码,避免依照现有技术的方式而将其直接发送到该服务器端。即,避免每输入一字都与服务器端进行一次网络通信,从而降低网络通信的次数,进而降低时延带来的等待。
该拦截模块12可通过多种形式实现,即,可以在应用层或键盘驱动层或通过硬件中断的方式实现。例如该拦截模块12为一键盘HOOK,在键盘驱动15获得键盘扫描码后,调用键盘HOOK拦截该键盘扫描码。
步骤102具体包括:该拦截模块12将拦截到的字符(也就是键盘扫描码)放入缓存模块13,同时利用本地化交互通道管理器14将拦截到的字符发送至虚拟应用程序11,该虚拟应用程序11利用其本地界面程序将该字符实时显示在客户端的显示模块(图中未示)上。
循环执行步骤101、102,直到用户输入完成并发出提交命令时,执行步骤103。客户端将此次输入所缓存的所有字符从缓存模块13中取出,通过虚拟通道一并发送到该服务器端。
步骤104具体包括:该服务器端2的被虚拟的应用程序22在其用户显示界面中填入所收到的所有字符,该服务器端监测该被虚拟的应用程序的用户显示界面发生的变化,计算界面变化数据从而得到用户显示界面的更新信息。
即,服务器端2接收到键盘扫描码后将其换算成字符串,并构造键盘消息,发送到被虚拟的应用程序22。被虚拟的应用程序22收到键盘消息并进行程序运行,从而在相应的文本输入框中一次性填入所收到的字符串,并通过用户界面显示出字符串。服务器端处理单元23监测到被虚拟的应用程序22的用户界面发生变化,计算界面变化差量,生成用户界面更新信息发往客户端1。
同时,被虚拟的应用程序22在运行时可将该字符串以特定字符显示格式进行显示,这样服务器端处理单元23将监测到该字符的显示格式变化,从而在更新信息中增加字符显示格式信息。该字符显示格式可以包括字体、字号、字形、颜色、间距、是否下划线、字符特效等。
步骤105具体包括:客户端1的虚拟应用程序11收到用户界面更新信息,更新信息中指定的用户界面区域,显示出已输入的所有字符串。
该客户端可为移动或非移动的终端,包括PC机、智能手机、个人数字助理、平板电脑、具有无线通信模块的计算机、车载移动通信设备。对于移动终端的连接网络方式,可以通过运营商的SIM卡上网实现和互联网的连接,也可能是通过WIFI连接入互联网,或其他方式接入互联网和服务器连接。对于平板电脑,其采用虚拟键盘来实现字符输入,在HOOK方式上使用软键盘钩子方式进行字符输入的截获操作。
本发明还公开了一种在虚拟应用环境下改善用户体验的方法,具体涉及的是一种用于实现虚拟应用系统客户端对本地资源的访问的方法。用于解决在现有技术中,虚拟应用系统中的客户端无法访问本地资源,用户体验满意度低的问题。
如图2A所示为一种在虚拟应用环境下改善用户体验的方法的流程图。
步骤201,客户端将调用客户端的本地资源所产生的操作指令通过客户端与服务器端间的虚拟通道发送至该服务器端;
步骤202,该服务器端的被虚拟的应用程序根据该操作指令调用该服务器端的虚拟资源控制管理器;
步骤203,该虚拟资源控制管理器将该操作指令转换为客户端本地资源请求指令,并将其通过该虚拟通道发送至该客户端;
步骤204,该客户端的本地资源控制管理器根据该客户端本地资源请求指令调用本地资源,并将调用结果返回该服务器端。
请参阅图2B所示为本发明的虚拟应用系统的结构示意图,特别是本地系统资源访问支持子系统的结构示意图,用于执行上述方法。
虚拟应用系统10具有客户端1以及服务器端2。客户端1的应用层加载有虚拟应用程序11、本地化交互通道管理器14以及本地资源控制管理器16,本地资源控制管理器16用于执行对本地资源的访问。服务器端2可设置在一应用服务器中。服务器端2具有本地化交互通道服务模块21、被虚拟的应用程序22以及虚拟资源控制管理器24。虚拟资源控制管理器24用于在服务器端虚拟出与客户端本地资源响应特征相同的虚拟资源,提供在虚拟应用系统下的客户端本地资源的调用接口。
本地化交互通道管理器14与本地化交互通道服务模块21配合使用,以实现客户端1以及服务器端2间的虚拟通道。
以下结合图2B具体介绍上述方法的实现过程。
服务器端2加载被虚拟的应用程序22,将被虚拟的应用程序22的用户界面发送到客户端的虚拟应用程序11,由虚拟应用程序11绘制并在客户端的显示模块中展现出被虚拟的应用程序22的用户界面。
步骤201具体包括:用户在虚拟应用程序11的用户界面上操作使用客户端的本地资源的业务功能,该本地资源包括获取电话号码本、查看照片、拨打电话、发送短信等。
在收到用户操作本地资源的输入信号(例如打开电话号码本)后,客户端对应产生一操作该本地资源的操作指令。客户端通过该虚拟通道将该操作指令发送到该服务器端。
步骤202具体包括:服务器端2的本地化交互通道服务模块21将该操作指令发送至该被虚拟的应用程序22,被虚拟的应用程序22根据该操作指令而运行,调用虚拟资源控制管理器24。
步骤203具体包括:当该虚拟资源控制管理器24判断该操作指令不是针对服务器端的本地资源而是针对客户端的本地资源的操作指令时,将操作指令转换成客户端的本地资源请求指令,并将该本地资源请求指令通过本地化交互通道服务21、本地化交互通道管理器14转发到客户端上的本地资源控制管理器16。
即,当该虚拟资源控制管理器24判断该操作指令不是针对服务器端的本地资源而是针对客户端的本地资源的操作指令时,该虚拟资源控制管理器24依据该操作指令发出一可以被客户端上的本地资源控制管理器16所直接执行的本地资源请求指令,以实现对客户端本地资源的调用。
步骤204具体包括:本地资源控制管理器16根据客户端的本地资源请求指令调用实际的客户端本地资源(打开电话号码本,显示电话号码列表)。本地资源控制管理器16通过本地化交互通道服务21、本地化交互通道管理器14以及虚拟资源控制管理器24将客户端的本地资源调用结果返回给被虚拟的应用程序22。
该将调用结果返回该服务器端的步骤可通过调用返回、进程通信、事件通知的方式实现。
被虚拟的应用程序22将访问到的客户端的本地资源(例如电话号码列表)显示在用户界面上,并将其通过虚拟通道发送至客户端进行显示。
在访问本地资源时可循环执行上述步骤,例如,打开电话号码本后,还可进一步查看一条电话号码的详细记录内容,编辑电话号码的内容等。在输入电话号码的内容时,可采用图1A所述方法,降低显示时延。另外,还可将客户端的图片上传至服务器端。
另外,由于客户端本地的数据资源可传送到服务器端,故而在服务器端也可使用该本地的数据资源。
该客户端可为移动或非移动的终端,包括PC机、智能手机、个人数字助理、平板电脑、具有无线通信模块的计算机、车载移动通信设备。对于移动终端的连接网络方式,可以通过运营商的SIM卡上网实现和互联网的连接,也可能是通过WIFI连接入互联网,或其他方式接入互联网和服务器连接。
更进一步的,在虚拟应用操作过程中,通常情况下所需要传输的数据仅为虚拟应用系统的服务器的界面信息和虚拟应用系统的客户端的鼠标和键盘事件和坐标信息。在这种情况下,虚拟应用系统的服务器与虚拟应用系统的客户端的数据传输量很少,也就是说虚拟应用所需的带宽很小。
可是,一旦虚拟应用系统的客户端依照图2A、2B方式进行本地资源的上传,例如对虚拟应用系统的服务器进行大量图片或者大型文件传输,所产生的数据包量将会增加数百倍,此时虚拟应用的交互式响应弊端就会非常明显,即:交互式传输导致数据包数量倍增,原有带宽不足;并且由于下行优先原则,当数据包碰撞,上行数据包将会被下行数据包所抵消。发送顺序容易发生混乱。
虚拟应用所支持的标准的网络协议包括:TCP/IP、SPX、IPX、NETBEUI、NWLINK,经测试,在实际的数据传输普遍使用TCP/IP。在虚拟化环境下数据传输速度仅为10-100k/s。该速度对需传输大量图片和文件的用户来讲无法接受。故而本发明提出一种在虚拟应用环境下提高数据上传速度的方法。本发明通过对数据包进行校验的方式保证数据传输的正确性。另外,在保证正确性的前提下可通过提高数据发送频率提高数据传输速度。
该步骤203进一步包括,该客户端本地资源请求指令被服务器端分装为N个指令数据包Servern,n=1,2,……N,该服务器端依照一频率向该客户端依次发送该指令数据包Servern;
即,每个指令数据包Servern对应请求目标客户端本地资源中的一部分,所有指令数据包Servern所请求的部分共同组成一完整的目标客户端本地资源。且每个指令数据包Servern中均包括标明所请求的本地资源的顺序的id信息。各个数据包的大小遵循虚拟应用系统的限制,例如5k。该频率可设置得较高,以提高传输速度,例如在通常的10m/s的网络速度的环境下,可不设任何延迟的依次发送该指令数据包,如果每个包5k,则该频率为(10m/s)/5k。该步骤204进一步包括:该客户端依次针对接收到的每个该指令数据包Servern,分别依据每个该客户端本地资源请求指令提取相应的客户端本地资源,并分别将该客户端本地资源封装成对应该指令数据包Servern的响应数据包Clientn,n=1,2,……N,发送给该服务器端;
即,客户端根据指令数据包Server1请求的内容,提取对应的本地资源,封装为Client1,以此类推。客户端收到该指令数据包Servern的顺序可能与其原始发送的顺序不同。客户端根据收到该指令数据包Servern的顺序再依次发出该响应数据包Clientn。客户端可仍依照该频率发出该响应数据包Clientn。
步骤204之后进一步包括:
步骤205,该服务器端对接收到的该响应数据包Clientn进行校验,将校验错误的响应数据包ClientN丢弃;
该服务器端可依据接收到的该响应数据包的顺序,依次进行校验。
该服务器端可利用多线程在已经收到响应数据包且指令数据包未完全发送完毕的情况下,同时继续指令数据包的发送以及对响应数据包开始校验,从而节约了数据传输的整体时间。
步骤206,该服务器端重新发送与该丢弃的响应数据包ClientN对应的指令数据包ServerN至该客户端,跳转执行步骤204,直到所有响应数据包Clientn都校验正确;
步骤207,该服务器端将接收到的所有响应数据包中的数据进行提取,排序后整合在一起。
由于每个响应数据包与每个指令数据包对应,故而每个响应数据包中也能体现出该id信息。该服务器端根据该id信息对从各个响应数据包中提取的数据进行排序,从而复原该本地资源的原始顺序,进而将其整合在一起,使得所请求的本地资源实现了从客户端至服务器端的传送。
在上述过程中,由于服务器端可对接收到的本地资源进行重新排序,故而降低了对上传过程中的数据包的顺序要求,即使顺序被完全打乱,也可恢复原貌。另外,由于本发明的服务器端以较高频率传送指令数据包,并可同时对所收到的响应数据包进行处理提高数据处理速度,且对错误包可进行重新发送,以提高数据传输的正确性。使得在保证正确性的前提下,数据传输的速度得到了提高。
通过本申请的方法提高传输速度后,在10m/s的环境中,在普通低配的服务器和同样配置的客户端上,数据上传实际速度可达到7.7m/s。
为提高上传速度,本发明还公开另一实施例。
步骤203进一步包括:该服务器端向该客户端发送一总指令数据包,其中包括有该客户端本地资源请求指令的所有信息;
即,此次并非由多个指令数据包分别传送该客户端本地资源请求指令,而是由一个总指令数据包整体传送,以尽量避免由多个下行数据包带来的与上行数据的更高碰撞几率。提高整体数据上传速度。
步骤204进一步包括:
步骤401,该客户端根据该客户端本地资源请求指令对应提取相应的客户端本地资源;
步骤402,该客户端将该本地资源封装为至少一个响应数据包Clientn,n=1,2,……N,依次发送至该服务器端;
其中,每个响应数据包中均包括标明所携带的本地资源的顺序的id信息。
步骤204之后进一步包括:
步骤205,该服务器端对接收到的所有的该响应数据包Clientn进行校验,将校验错误的响应数据包ClientN丢弃;
该服务器端可依据接收到的该响应数据包的顺序,依次进行校验。
步骤206,该服务器端重新发送与该丢弃的响应数据包ClientN对应的指令数据包ServerN至该客户端,跳转执行步骤204,直到所有响应数据包Clientn都校验正确;
更为具体的,该服务器端根据丢弃的响应数据包中的id信息确定所需提取的本地资源信息,生成一客户端本地资源请求指令,从而重新生成该对应的指令数据包ServerN。该步骤206具体执行的是,该服务器重新发送与该校验错误的响应数据包ClientN对应的指令数据包ServerN至客户端,该客户端根据该指令数据包提取响应的本地资源,再次封装成一个响应数据包ClientN,发送至该服务器端进行重新校验,如依然校验错误,循环该步骤,如果最终校验正确,执行后续步骤。
步骤207,该服务器端将接收到的所有响应数据包中的数据进行提取,排序后整合在一起。
由于该服务器端向该客户端发送一总指令数据包,从而尽可能的避免了下行数据包与上行数据包的冲突,提高了速度。另外,由于本发明的服务器端以较高频率传送指令数据包,并可同时对所收到的响应数据包进行处理提高数据处理速度,且对错误包可进行重新发送,数据传输的整体速率得以提高并保证了正确性。
为提高上传速度,本发明还公开另一实施例。请参阅图2C所示。
步骤203进一步包括:该服务器端向该客户端发送一总指令数据包Server,其中包括有该客户端本地资源请求指令的所有信息;
即,此次并非由多个指令数据包分别传送该客户端本地资源请求指令,而是由一个总指令数据包整体传送,以尽量避免由多个下行数据包带来的与上行数据的更高碰撞几率。
步骤204进一步包括:
步骤401’,该客户端根据该总指令数据包中的该客户端本地资源请求指令对应提取相应的客户端本地资源;
步骤402’,该客户端将部分的该客户端本地资源封装为响应数据包,发送至该服务器端;
由于在虚拟应用系统下每个数据包的大小有限制,故而一般不可能将所有本地资源放在一个响应数据包中。该客户端从提取出的客户端本地资源中选取第一部分封装为响应数据包,并在其中加入标明该响应数据包中的本地资源在所有本地资源中的顺序的id信息。
步骤403’,该客户端本地触发一指令数据包Servern,n=2,……N,并根据该指令数据包Servern封装另一部分的该本地资源为响应数据包Clientn,发送至该服务器端,n加1,重复执行步骤403’,直至所有的该本地资源均发送至该服务器端;
由于本地资源的第一部分已经被封装并发送,则当前需要触发针对后续部分的本地资源的指令数据包。故而,此时从Server2开始,每触发对应一部分本地资源的一个指令数据包,对应封装并发送该部分本地资源
该步骤403’为在发送第一个响应数据包Client1后,客户端为继续发送后续的本地资源,故而,此时,在本地自主触发后续的发送动作从Server2开始,依次将各个部分的本地资源主动发送,即,每触发一个ServerN,对应发送一个ClientN,在发送一ClientN后,触发下一个ServerN,直到全部本地资源本发送。
步骤204之后进一步包括:
步骤205,该服务器端对接收到的该响应数据包Clientn进行校验,将校验错误的响应数据包ClientN丢弃;
该服务器端依据接收到的该响应数据包的顺序,依次进行校验。
步骤206,该服务器端将对应该校验错误的响应数据包ClientN所携带的数据的客户端本地资源请求指令,封装为指令数据包ServerN,发送至该客户端,客户端提取对应的本地资源重新封装为ClientN,跳转执行步骤205,直到所有响应数据包Clientn都校验正确;
步骤207,该服务器端将接收到的所有响应数据包中的数据进行提取,排序后整合在一起。
通过该自主触发的方式实现的效果在于:由于该服务器端向该客户端发送一总指令数据包,从而尽可能的避免了下行数据包与上行数据包的冲突。提高了速度。
本发明还公开了一种在虚拟应用环境下改善用户体验的方法,可以实现虚拟应用系统的客户端支持其客户端外设。用于解决在现有技术中,虚拟应用系统中的客户端无法访问其连接的外设,用户体验满意度低的问题。支持方式包括两种:一种是在应用层支持,一种是在驱动层支持。在应用层中实现对客户端外设的支持,可以大大减少信息交互次数,改善访问外设的性能,但是需要根据具体的被虚拟的应用程序进行定制。驱动层支持虽然不能减少信息交互次数,但是具有交互的通用性,一次定制可以支持一类外设。
以下详细说明一种在应用层实现虚拟应用系统的客户端支持其客户端外设的方法。
如图3A所示为一种在虚拟应用环境下改善用户体验的方法的流程图。
步骤301,客户端将访问客户端的外设所产生的操作指令通过客户端与服务器端间的虚拟通道发送至该服务器端;
步骤302,该服务器端的被虚拟的应用程序根据该操作指令调用访问该外设的API调用指令;
步骤303,该服务器端拦截该API调用指令并将其通过客户端与服务器端间的虚拟通道发送至该客户端;
步骤304,该客户端解析该API调用指令,封装成该客户端的操作系统所能识别的API调用指令;
步骤305,该客户端根据该操作系统所能识别的API调用指令在应用层访问相应的外设。
请参阅图3B所示为本发明的虚拟应用系统的结构示意图,特别是外设支持本地化子系统的结构示意图,用于执行上述方法。
虚拟应用系统10具有客户端1以及服务器端2。客户端1的应用层加载有虚拟应用程序11、设备控制管理器17、设备驱动18、设备总线驱动19、设备控制器110以及本地化交互通道管理器14。服务器端2可设置在一应用服务器中。服务器端2的应用层中设置有本地化交互通道服务模块21,被虚拟的应用程序22以及拦截模块25。
本地化交互通道管理器14与本地化交互通道服务模块21配合使用,以实现客户端1以及服务器端2间的虚拟通道。
以下结合图3B具体介绍上述方法的实现过程。该外设例如为蓝牙打印机。
服务器端2加载该被虚拟的应用程序22,被虚拟的应用程序22的用户界面发送到客户端1的虚拟应用程序11,由虚拟应用程序11绘制并展现出被虚拟的应用程序22的用户界面。
步骤301具体包括:用户在虚拟应用程序11的用户界面上操作使用外设的业务功能,该客户端在接到用户的输入信号后产生一对应的操作指令,该操作指令经过虚拟应用系统的虚拟通道发送到服务器端2。
步骤302具体包括:服务器端2的本地化交互通道服务模块21将该操作指令发送至该被虚拟的应用程序22,被虚拟的应用程序22根据该操作指令而运行,调用访问该外设的API调用指令。该API调用指令包括访问外设所用的API名称及调用参数。
即,步骤302的调用API调用指令的步骤,可视为应用层在调用外设接口。API调用指令可视为外设接口。由于用户在客户端使用的应用程序实际上在服务器端运行,也就是服务器端运行该被虚拟的应用程序。因而,当用户访问客户端的外设时,实际上需由该被虚拟的应用程序访问客户端连接的外设,即,将客户端的外设重定向到服务器端。因此,服务器端预先设置有该外设的驱动程序(例如一虚拟打印机驱动)和相关的应用程序,以配合该API调用指令实现对外设的访问。被虚拟的应用程序22根据该操作指令所调用的具体的API调用指令等同于现有技术中非虚拟化环境下客户端的应用程序对客户端外设的API调用指令。
步骤303具体包括:该API调用指令被调用时触发拦截模块25,该拦截模块25拦截该API调用指令,不发送至该服务器端的设备驱动。
在一实施例中,该拦截模块25例如为应用HOOK,其预先被定制为与被虚拟的应用程序22相关联。即,该API调用指令被调用时触发应用HOOK的钩子函数,API调用指令被拦截下来,不发送到服务器端的设备驱动。
在一实施例中,该服务器端在应用层内部拦截访问外设的API调用指令,或者,在应用层外部拦截访问外设的API调用指令。即,在应用层内部或外部拦截调用外设接口。
在本发明中,拦截模块25拦截应用层调用外设接口包括两种方式,第一:应用层的拦截模块25自己封装调用外设的接口,可以称为应用层的内部。即,服务器端为实现对外设设备的访问预先设置有外设接口,该外设接口可以是安装设备驱动过程中一并安装的或者依据操作系统通用的标准设置。服务器端应用层替换该服务器端原始提供的外设接口,将其封装成可直接通过虚拟通道访问客户端的外设接口。第二:应用层的拦截模块25调用服务器端操作系统API钩子函数的方式封装外设提供的外设接口,即:应用层不替换服务器端提供的外设接口,只是使用API钩子函数的方式,HOOK该外设接口提供的接口,替换为预先设置的执行指令,以将该外设接口封装成可直接通过虚拟通道访问客户端的外设接口,这种情况可以表述为应用层的外部。对于第一种情况,这些外设接口可能都会被该调用该外设的应用所使用,因此拦截模块需要拦截所有的API调用指令,对于第二种情况,拦截模块将只拦截外设接口中被该操作指令调用部分的API调用指令。
此外,拦截模块25按虚拟通道协议封装被调用的该API调用指令,并将其通过本地化交互通道服务21发送到本地化交互通道管理器14。所述封装的方式包括按照所调用API函数声明原样封装或者按照本领域技术人员可以想见的便于客户端远程调用的其他格式转换后封装。
步骤304具体包括:本地化交互通道管理器14将封装的API调用指令拆封,并按照客户端的操作系统能识别的格式将拆封的API调用指令重新封装成适用于客户端的操作系统访问外设的API调用指令,然后转发到设备控制管理器17。该重新封装就是将数据还原成客户端操作系统下等价的API及参数。
步骤305具体包括:该操作系统所能识别的API调用指令被发送往客户端的操作系统,产生I/O请求,该I/O请求被发送往与该外设对应的设备驱动,该设备驱动调用设备总线驱动,产生外设控制指令并发送到设备控制器,该设备控制器根据该外设控制指令完成对该外设的调用。
该步骤305的详细实现方式如下:
由于是应用层支持,设备控制管理器17将API调用指令发往客户端的操作系统。根据现有技术可知,客户端根据该API调用指令产生I/O请求,通过外设与驱动的映射关系,I/O请求被发送到外设对应的设备驱动18,调用客户端所安装的实际的外设驱动程序。设备驱动18随之调用设备总线驱动19,产生外设控制指令,然后发送到设备控制器110。设备控制器110与外设通信,操作外设,完成业务功能,例如打印等。
通过该应用层支持的方式可以实现客户端对外设的访问,同时,信息交互次数较少,访问外设的性能较高。
以下详细说明一种在驱动层实现虚拟应用系统的客户端支持其客户端外设的方法。通过在服务器端直接产生调用外设的I/O请求数据并发送至客户端的方式,实现驱动层的外设支持。
参阅图4A所示为一种在虚拟应用环境下改善用户体验的方法的流程图。
步骤401,该客户端将其所连接的所有外设的外设信息发送至该服务器端;
步骤402,该客户端将用户操作客户端的一外设所产生的操作指令通过客户端与服务器端间的虚拟通道发送至该服务器端;
步骤403,该服务器端根据该操作指令产生调用该外设的I/O请求数据包;
步骤404,该服务器端根据该外设信息判断该I/O请求数据包是否用于调用该客户端的外设,对调用该客户端的外设的I/O请求数据包进行拦截,通过该虚拟通道将其转发至该客户端;
步骤405,该客户端依据该I/O请求数据包,驱动该外设。
请参阅图4B所示为本发明的虚拟应用系统的结构示意图,特别是又一种的外设支持本地化子系统的结构示意图,用于执行上述方法。
虚拟应用系统10具有客户端1以及服务器端2。客户端1的应用层加载有虚拟应用程序11、设备控制管理器17、虚拟设备驱动111、设备驱动18、设备总线驱动19、设备控制器110以及本地化交互通道管理器14。服务器端2可设置在一应用服务器中。服务器端2的应用层中设置有本地化交互通道服务模块21,被虚拟的应用程序22,虚拟设备控制管理器26以及虚拟设备总线驱动27。虚拟设备控制管理器26用于管理被虚拟的应用程序22对外设的访问,记录并转发设备控制指令和通信数据。虚拟设备总线驱动27用于拦截被虚拟应用程序访问外设时发出的I/O请求。服务器端还安装了该外设的驱动程序和使用该外设的应用程序。虚拟设备总线驱动27用于加载外设的驱动程序、卸载外设的驱动程序、虚拟出与实际外设响应特征相同的虚拟设备和/或枚举虚拟设备。该虚拟设备为将客户端的外设重定向到服务器端时,该服务器端创建的和客户端的该外设相同的虚拟设备,其连接在虚拟总线上,被虚拟的应用程序对虚拟设备的访问都会通过虚拟通道发送到客户端进行实际设备的访问。用户关闭应用或取消重定向时,该虚拟设备被取消。
本地化交互通道管理器14与本地化交互通道服务模块21配合使用,以实现客户端1以及服务器端2间的虚拟通道。
以下结合图4B具体介绍上述方法的实现过程。
步骤401具体包括:
步骤4011,该客户端的设备控制管理器加载用户选择连接的所有外设的虚拟设备驱动;
步骤4012,该客户端的设备控制管理器将用户选择的所有外设的该外设信息发送至该服务器端的虚拟设备控制管理器,该虚拟设备控制管理器通知该服务器端的虚拟设备总线驱动拦截与该外设有关的指令。
更详而言之,步骤401通过如下方式实现,在客户端启动后,该客户端的设备控制管理器17枚举出终端的外设。用户选择要支持的外设。根据用户的选择,设备控制管理器17加载相应的外设的虚拟设备驱动111。设备控制管理器17通过本地化交互通道管理器14、本地化交互通道服务21通知虚拟设备控制管理器26具体要支持的外设是什么。虚拟设备控制管理器26通知虚拟设备总线驱动27准备拦截与该外设相关的所有通信。
服务器端2加载该被虚拟的应用程序22,在客户端2与服务器端建立连接后,被虚拟的应用程序22的用户界面发送到客户端1的虚拟应用程序11,由虚拟应用程序11绘制并展现出被虚拟的应用程序22的用户界面。
步骤402通过如下方式实现,用户在虚拟应用程序11的用户界面上操作使用外设的业务功能,从而产生一操作指令,该操作指令经过虚拟应用系统的虚拟通道发送到虚拟应用系统服务器端2。该被虚拟的应用程序22根据该操作指令运行。
步骤403通过如下方式实现,被虚拟的应用程序22调用访问外设的API调用指令。在驱动层外设支持的模式下,不会触发拦截模块25的钩子函数,不用对被虚拟的应用程序的任何API调用指令进行拦截。API调用指令被服务器端的操作系统转换成对应的I/O请求数据包,被直接发送到设备驱动上。设备驱动调用虚拟设备总线驱动27。
在一优化实施方式中,该I/O请求数据包可以包括I/O请求的底层的通信数据,如USB设备的URB数据包等。
另外,由于本发明可将API调用指令直接转换成I/O请求数据包,故而,预先一次性定制一种API调用指令所对应的I/O请求数据包,则可以支持一类外设,无需依具体的被虚拟的应用程序的变化而变化,从而具有较好的通用性。
步骤404通过如下方式实现,虚拟设备总线驱动27根据该外设信息检测到当前I/O请求数据包针对的是要访问用户选定的外设(虚拟设备),于是拦截这些I/O请求数据包,不发送到服务器端本地的设备控制器,而是通过虚拟设备控制管理器26、本地化交互通道服务21、本地化交互通道管理器14转发到客户端上的设备控制管理器17。设备控制管理器17用于管理客户端上实际的对外设的访问操作。
该虚拟设备总线驱动27通过在虚拟设备总线上拦截或者以过滤驱动的方式进行拦截。过滤驱动的方式是公知技术。对于虚拟设备总线拦截,由于总线驱动是处于设备驱动的下层,所有针对设备驱动的访问,都会通过总线,之后才到达设备,因而在总线上也能够实现拦截。
最后,步骤405通过如下方式实现,设备控制管理器17调用相应的虚拟设备驱动111。虚拟设备驱动111将I/O请求数据包发送到实际的设备总线驱动19。设备总线驱动19产生外设控制指令,然后发送到设备控制器110。设备控制器110与外设通信,操作外设,完成业务功能。
即,虚拟设备驱动111根据该I/O请求数据包,依照现有的外设的设备驱动的步骤执行对设备的驱动。
当将服务器端的被虚拟的应用程序的用户界面重定向到客户端后,在客户端不使用客户端原有的设备驱动,本发明在客户端设置了虚拟设备驱动111。虚拟设备驱动111用于虚拟出与外设原有驱动程序相同的操作行为,由于服务器端已经产生了用于调用外设的I/O请求数据包,因此,该虚拟设备驱动111只负责将要实际调用设备的I/O请求数据包下发到设备,并把设备返回的信息通过网络传回服务器端,不负责具体产生驱动数据。可见,客户端可以不设置实体设备驱动。
该步骤405之后还包括:该客户端将该外设的运行处理结果通过该虚拟通道传回该服务器端的虚拟设备总线驱动,该虚拟设备总线驱动将该运行处理结果反馈给服务器端的被虚拟的应用程序22。被虚拟的应用程序22根据该运行处理结果依据上述步骤对虚拟设备进行访问,访问结果再次通过虚拟通道发送到客户端进行实际设备的访问,直到用户结束访问。
以上各个技术方案中所述的该客户端可为移动或非移动的终端,包括PC机、智能手机、个人数字助理、平板电脑、具有无线通信模块的计算机、车载移动通信设备等。请参阅图5所示为客户端连入网络的示意图。
客户端可通过其网络装置连接入互联网,进而通过web服务器,连接至设置有虚拟应用系统服务器端的应用服务器。
对于移动终端的连接网络方式,可以通过运营商的SIM卡上网实现和互联网的连接,也可能是通过WIFI连接入互联网,或其他方式接入互联网和服务器连接。以实现客户端与虚拟应用系统服务器端的初始连接。
如图6所示为本发明的虚拟应用系统的结构示意图。其可以同时包括字符输入操作体验本地化子系统、本地系统资源访问支持子系统以及两种外设支持本地化子系统。即,本发明的虚拟应用系统可以一并解决上述三种子系统分别解决的问题。
基于图6所示,本地化交互通道管理器14用于解析并处理服务器端转发的被虚拟的应用程序22与本地资源控制管理器16之间、被虚拟的应用程序22与拦截模块12之间或者被虚拟的应用程序22与设备控制管理器17之间的通信数据。
本地化交互通道服务模块21用于转发虚拟应用系统服务器端、虚拟资源控制管理器24、虚拟设备控制管理器26、拦截模块25与客户端各模块的通信数据
通过上述技术方案可以有效改善用户体验,丰富虚拟化环境下的功能应用,降低虚拟应用程序输入文本后的回显时延,实现虚拟应用系统客户端对本地资源的访问。实现在应用层实现虚拟应用系统的客户端支持其客户端外设,实现在驱动层实现虚拟应用系统的客户端支持其客户端外设,在虚拟化环境下为用户的应用带来便利,以实现在虚拟应用环境下获得接近于本地应用程序的操作体验。