DXPC的故事:差分X协议压缩

很久以前,有一位沮丧的工程师,他需要一种更快的方式来远程显示他家用PC上的X客户端。他有了一个刚出生的女儿,非常希望有时间陪伴她,而不用在工作和家之间来回奔波。有一天,一位同事告诉他一个很棒的小程序,叫做DXPC。这是真的吗?他的所有问题都解决了吗?并没有,但至少有所改善。
DXPC代表差分X协议压缩。它是一个小型的客户端/服务器程序,运行在低带宽链路(例如,28.8K调制解调器PPP链路)的两端,旨在利用X协议中的“特性”来加速跨链路的应用程序远程显示。它能够将X消息压缩高达10:1。然而,并非所有消息都能获得如此出色的性能。有些消息根本没有压缩。平均而言,您可以期望达到4:1的压缩率。这个小巧而精妙的程序最初由Brian Pane编写,并由Zachary Vonler进一步开发。
DXPC采用了六种不同的压缩技术。首先,它剥离不必要的数据字段。其次,它缩小可能性数量有限的字段(例如,布尔值)。使用类似的技术,它缩小通常很小的字段,同时仍然处理它们很大的情况。第四种方法是在链路的每一端使用缓存来存储不同的命令类型。有了这个缓存,它不再传输完整的坐标,而是根据先前发送的命令传输小得多的差分值。此外,还存储了最后六个delta的缓存,以便它可以基于delta的模式进行进一步编码。最后,DXPC缓存多次传输的大数据块(例如,X资源)。DXPC还采用了文本压缩器和图像压缩器。为了更详细地描述这些技术,作者们包含了一个名为DESIGN的文本文件,其中描述了DXPC的工作原理。
DXPC是一个客户端/服务器应用程序,但客户端和服务器是同一个可执行文件。客户端是远程站点或执行X应用程序的站点。服务器端是本地站点或显示X应用程序的站点。您必须能够在远程站点和本地站点上编译并运行DXPC。幸运的是,作者们已经为您完成了大部分移植工作。DXPC使用 autoconf,并且可以在大多数UNIX平台上“开箱即用”地编译。此外,还有针对Win32和OS/2的端口。我为Red Hat Intel Linux(本地)和Solaris 2.5.1(远程)编译了它,没有遇到任何问题。好吧,一个小小的障碍;我不得不在Solaris的Makefile中的LIBS行添加选项 -lnsl -lsocket。我已经将这个小问题发送给了作者,希望它能在3.6版本中得到修复。
在您的本地工作站和远程站点上执行以下步骤。完成这些步骤后,您就可以开始了。
tar xzvf dxpc-3.5.0.tar.gz cd dxpc-3.5.0 ./configure # optionally add --prefix=/home/bubba make make install make install.man
现在是成功的时刻——让我们看一个例子。在工作中,您有一台运行Solaris的Sun服务器。在这台名为 workhog 的机器上,您通常运行一些昂贵的CAE(通用应用程序环境)工具,这些工具在Linux上不可用。(如果这些供应商意识到Linux的强大之处就好了。)在家里,您有一台名为 linuxrules 的Linux机器,您希望它除了Quake和Netscape之外还能做更多事情。您已经在两台机器上编译并安装了DXPC,并且正坐在家里想要做一些工作。您启动 linuxrules,并通过那可怜的28.8K调制解调器与 workhog 建立PPP连接。屏幕上有两个xterm或rxvt终端。一个xterm连接到 linuxrules,另一个连接到 workhog。
在 workhog 的xterm终端中,输入以下三个简单的命令
setenv DISPLAY linuxrules:0.0 dxpc -f -s1 setenv DISPLAY unix:8
然后,在 linuxrules 的xterm终端中,输入这一个简单的命令
dxpc -f workhog -s1现在您已准备就绪。在 workhog 的xterm终端中,启动您非常昂贵的CAE工具。突然,就好像您的调制解调器变成了T1线路。好吧,虽然没那么夸张,但希望它比以前更快,并且足够有用。-s1 参数是可选的,它将报告关于压缩率的1级统计信息。还有一个2级统计参数 -s2,它会打印所有已发送消息类型的统计信息。
DXPC使用的压缩方法是调制解调器中的硬件压缩无法实现的压缩。事实上,我认为它可以与其他压缩技术互补,以提高整体性能。作者们在开发和维护一个稳定、易于编译且易于使用的程序方面做得非常出色。我真希望我一年前就找到了它。请注意,如果您使用带有.Xauthority文件的X授权,则需要一些额外的步骤才能使用DXPC。这些步骤在源代码附带的README文件中有所介绍。
Brian Pane告诉我,他们正准备很快发布DXPC 3.6.0。他为更多的X消息添加了压缩。
Justin Gaither 是Alcatel Network Systems的ASIC设计师。他一直是Linux的狂热爱好者三年,并希望享受他的15分钟成名时间。可以通过 jgaither@aur.alcatel.com 与他联系。