【技术内幕】VMWare的Unity模式(无缝模式)技术原理
前言
在使用VMWare虚拟机Unity的操作就不说了,这里只讲如何开发出这样的功能的,也就是阐述其技术原理!
有时候隔行如隔山,其实在软件开发行业内部更是如此,比如长期做WEB,做数据库,做ERP等等的程序员,是很难自己去分析并获得这样技术知识的。
所以下面的内容是分享给不熟悉的又有兴趣的人的!
如何理解VMWare的无缝模式(以及Parallels Desktop的融合模式)?
抛开虚拟的概念来看,这实际上是在两台电脑之间的操作,也就是主机电脑远程映射操作客户机电脑的应用。
注意这里的核心是远程操作,底层协议其实也不存在自创,也不神秘,而是大名鼎鼎的RDP协议!当然大厂有自己的技术尊严,所以在RDP协议基础上又设计了PCoIP协议,对并行处理进行一系列优化,这些实际上属于超集的概念,核心是不变的!
RDP协议设计初衷
要知道RDP的全称其实是Remote Display Protocol,也就是远程显示协议
微软最开始设计RDP协议的时候,其传输主体是围绕应用的UI内容,而如今我们所熟知的远程桌面由于名气太大,应用太普遍,以至于很多人将RDP理解为Remote Desktop Protocol,也就是远程桌面协议?
远程桌面 or 远程应用?
RDP既然是以应用为主体,那远程桌面为啥看起来像将整个远程电脑的系统全部”搬过来“呢?其实也很简单,将桌面也理解为一个独立应用即可!
大部分人平时接触最多的是远程桌面,比如Windows自带的远程桌面连接,VNC,FreeRDP, RdpAdmin等等软件,这类软件多是因为符合日常操作习惯!
那么有没有一种方法让你只远程操作一个应用,而不是整个桌面呢?答案是肯定的,而且微软在WIN2008/WIN7后为了在虚拟化应用市场上与VMWare, Ctrix等大厂竞争,也是自带提供了相应的模块,叫做RemoteApp!
关于虚拟化概念其实很复杂,这种远程应用是属于虚拟化应用的一种场景,利用的是远程服务器资源(即瘦客户机-应用服务器搭配),还有一种是应用虚拟化,即App-V,Xen-APP等,利用的是本机资源(即胖客户机-数据服务器),服务器在基础上讲只是分发管理应用包。
这里说的虚拟化应用和应用虚拟化,其实是我个人的理解。
这种说法各人各自理解就好,没必要纠结,毕竟虚拟化的方式花样非常多,从机器虚拟化(虚拟机)到应用环境虚拟化(沙箱),还有基于远程技术的虚拟化桌面,等等,一时半会说不清。
虚拟机融合模式技术原理
话题到了这里已经很清晰了,就是RDP的原理,可能你还想进一步了解如何使用RemoteApp,这部分微软的RDP也有相应文档,但大部分是关于如何配置模块,配置应用,以及在客户端如何远程启动应用,使用场景也主要是企业客户,普通人并不是很需要!
如果想了解更多可以自行百度或者在Windows搜索条输入RemoteApp,会出来一个"RemoteApp与远程桌面"的菜单项,打开后再去研究。
如何开发远程应用?
开发人员了解原理后,可能进一步就会想能不能自己开发出来?
微软有现成的开发接口,其远程桌面连接提供了ActiveX控件MSTSC,在使用时可以进行相关的配置,使用IMsRdpClientShell接口中的RemoteProgram.RemoteProgramMode=TRUE即可开启,前提是远程服务端配置好相关的APP。
个人开发者还可以了解一下开源项目FreeRDP,该项目很早就支持了RemoteApp技术,VMWare和Parallels其实内部也就是使用或借鉴了该技术,且作为其虚拟化应用的技术基础之一,目前FreeRDP还支持Android系统,在使用该技术的应用中,你还可以实现比如在手机上远程打开操作一个Windows程序的功能,且效果极佳,绝对不是那种图像比例缩放的远程操作类能比的,因为从RDP协议原理上来讲,其实就是原生UI的重绘!