虚拟网络计算VNC[1](Virtual Network Computing)是由AT&T剑桥研发中心研发的一种瘦客户计算[2]体系,是一个强大的远程桌面共享工具,能够让多个客户端通过互联网查看服务器端实时桌面状况并可以进行远程操作。本文首先分析了低速网络环境下VNC在远程视频会议系统中应用的技术难点,并提出了一种在低速网络下利用VNC实现应用程序共享的解决方案。
1 VNC协议特点
VNC由VNC Server和VNC Client两部分组成。VNC Server产生本地显示,通过VNC协议实现VNC Server和VNC Client之间的通信。VNC协议中实现了一种远程图形用户界面访问协议RFB[2](Remote Frame Buffer)协议,RFB协议是基于帧缓存(Frame Buffer)层级,因此适用于所有操作系统平台及应用,例如X Windows、MS Windows和Macintosh等。VNC在TCP/IP协议基础上通过一个简单的图形界面传输协议实现在远程客户端上显示服务器端的桌面实时数据。
协议的显示方面是基于一个很简单的原理,即将一个矩形区域的像素点放置在一个特定的位置上。通过采用不同的图像编码方法,可以在传输速度、图像质量、服务器处理速度、终端显示速度和网络带宽之间达到平衡。通过每次的窗口更新,可以得到最新的窗口内容。在某些方面,这看上去更像是一种视频图像流。每次窗口更新的消息是通过客户端发送给服务器端的,每接收到一个消息,服务器端对其发生响应,这样就使得协议本身可以控制自己的刷新速度。如果客户端或者由于网络的原因比较慢,同样地刷新率也会比较低,这样可以完成速度的自适应。
输入协议是基于标准工作站的键盘响应消息和鼠标设备的。当客户端接收到这些输入消息后,被简单地以事件形式传送给服务器端,并产生对应的动作。
2 VNC在低带宽网络环境中应用存在的问题
在大规模视频会议中,当需要对其中一个会议成员的桌面或者某个应用程序进行共享时,此时VNC服务器的计算性能和网络接入的条件都比较差,这样就对共享机制提出了很高的要求,其必须具备高效、延时小,又要求架构轻盈、占系统资源少、节省带宽等性能。由于在国外网络带宽足够,采用VNC机制的多点应用程序共享能够流畅地运行,但在国内目前低带宽的网络条件下,VNC机制采用的是星型直连结构,如果直接采用VNC默认的星型直连机制,在多点远程视频会议中实现应用程序共享会很困难,VNC Server与各VNC Client以直连方式进行通信,此种情况下由于VNC Server端的出口带宽受到限制,VNC Server端的数据发送压力会呈线性增长,在2 MHz的ADSL出口带宽条件下,当会议成员达到10个后,将导致严重的网络拥塞,致使应用程序共享实时性大大降低,因而其不具备在远程视频会议系统中的实际可用性。
3 VNC共享机制改进方案
3.1 VNC共享通信机制
VNC机制默认采用直连的方式同VNC Client通信,本文将提出一种新的实现方案,通过在远程视频会议系统[4]中采用中转服务器转发模式实现共享,具体结构如图1所示。此时VNC Server端只需上传数据给中转服务器,VNC Client只与中转服务器建立连接,由中转服务器向每个客户端发送数据,通常中转服务器的网络出口带宽都比较大,因此网络带宽不会成为性能瓶颈。这样就大大减轻了VNC Server端的网络传输压力,在应用程序共享时系统的反应速度也将得到提升。
3.2 屏幕变化检测算法
屏幕变化检测算法性能的好坏将直接影响到VNC Server端发送的数据量,一种高效的屏幕检测算法将大大降低传输的数据量,节省网络带宽,从而提高系统的实时效果。VNC默认的屏幕变化检测机制是通过消息钩子机制获取区域的坐标信息后,再将坐标区域的屏幕像素数据发送给各VNC Client。此检测方法使得大量没有发生改变的屏幕数据也被发送,增加了网络发送的数据量,在低速网络环境中容易造成网络拥塞,影响系统的性能。因此,本文在此基础上提出了一种新的屏幕变化区域检测算法。
VNC机制通过采用消息钩子机制截获系统屏幕重绘区域信息,将得到的区域拆分成一个矩形链表(遍历链表)来存储区域坐标信息,记为array_list,定义一个变化区域记为vnc_rgn,专门保存需要重新发送的区域位置信息,对array_list每个成员矩形调用此检测算法进行变化区域检测。具体的算法流程图如图2所示。