引言
在“软件变服务”的背景下,通过网络提供服务,即网络计算,占据了越来越重要的地位。这种模式的特点是:客户端只进行显示和输入,不进行复杂计算,应用程序和数据都运行和存储在服务器端。为了在有限的资源条件下,如手机,PDA等便携终端上实现便捷的移动桌面效果,本文提出一种基于嵌入式系统的远程桌面控制方案,其基本思想是尽可能地减少终端资源占用,最大限度地增强其适用范围,以此达到增强应用价值的目的。具体方案是通过Directvnc 的移植来实现的,由于Directvnc 与其它Unix 系统不同的是它通过轻量级图形库DirectFB 使用Linux 帧缓冲设备。DirectFB 在FrameBuffer 的基础上提供了图形加速等多种功能,显示速度快,链接库较小,可以在一定程度上节省系统资源,另外,directvnc工作在帧缓冲层,平台独立性好,摒弃了对庞大低效的X Window 等标准嵌入式系统图形化用户界面的依赖,这一功能对于资源有限的嵌入式系统和PDA 等环境下是非常有效的。
1 网络计算模式的实现
1.1 网络计算模式
系统的实现基于网络计算模式(virtual network computing,VNC),该模式由VNC 服务器、RFB(远程帧缓存) 协议和VNC 客户端3 部分组成。Directvnc 作为客户端,它使用图形用户界面显示与进行输入输出控制,通过互连网远程访问与控制服务器。RealVNC 作为服务器端,它进行大量的计算并提供帧缓存变化到客户端显示设备,减轻了客户端负荷。RealVNC 功能成熟,高效实用,完全跨平台,兼容性好,可广泛应用于多种操作系统和开发系统。系统通信通过RFB 协议来完成,RFB是一个架构在TCP/IP上远程图形用户的简单协议,通过TCP/IP 协议簇连接,是基于字节流或消息的可靠传输。它是真正的瘦客户协议。
1.2 基于RFB 的瘦客户端实现
因为RFB 工作在帧缓存级别上,所以它可以应用于所有的窗口系统,例如:X11,Windows 和Mac 系统,重要的是对客户端硬件的需求少能支持更广范围的硬件环境。
在协议的设计上,对客户端的任务实现也尽可能的简单,这体现在:
(1)显示编码源语。
显示编码源语有基于像素和基于图形两种绘图源语。RFB 的显示编码方式基于像素,其显示更新在服务器端处理,客户端仅需要显示像素数据。客户端计算简单、平台独立性好。
(2)系统最初握手阶段对像素数据格式和编码类型协商的设计。
像素格式涉及如何通过像素值来实现不同颜色的重现,最常用的像素格式是24 位或16 位真彩色。像素格式描述了像素数据存储所用的格式,定义了像素在内存中的编码方式。
(3)编码方式。
编码是根据一定的协议或格式把模拟信息转换成比特流的过程。在RFB 协议中,编码就是将每一个矩形像素点的数据转化为包含该矩形像素点的位置、宽度和高度信息以及编码类型的前缀,再加上经过此编码方式编码的数据本身。RFB 协议主要采用的编码方式是二维运动步长编码(2DRLE)的变种,如Raw、CopyRectangle、RRE(Rise-and-Run-Lengeh)、CoRRE(ComPACt RRE)和缺省时使用的Hextile。实际上常用的有2DRLE、Hextil 以及CopyRectangle 编码,他们为桌面提供最好的压缩方法。在RFB 中压缩编码算法比不高,但由于算法简单,故对客户端的图形显示引擎设计要求很低,客户端程序也相对简单。
(4) 显示更新机制。
RFB 的显示协议是基于一个简单的画图原理,即将每一个矩形像素点放在给定的位置(x,y)上。
帧缓存的更新通过一系列块操作来完成,这种更新像素块的操作效率较低,但是通过多种像素编码压缩方式的灵活选择可以实现网络带宽、客户端计算速度和服务器处理的速度之间的效率折中,从而实现高效率的图形显示。显示更新机制包括更新时机及刷新模式。更新时机有客户端拉动和服务器端推动两种,每种更新时机又可采用懒惰更新和急切更新两种刷新模式。RFB 更新请求是客户端驱动型的懒惰更新,只有在服务器端收到客户端的请求时才会向其发送若干命令缓冲合并后的显示更新。对于一些应用,在相同区域上的更新往往非常频繁,这样如果网络非常慢或者客户端处理能力不强时,客户端驱动的更新机制使得客户端的显示质量可以得到调整。
总之,在网络计算模式下,RFB协议尽可能地减少终端资源占用并提高网络利用率,基本提供了一个比较瘦的客户端。