7

作为客户端支持工具的一部分,我想提供一些功能来请求查看/远程控制桌面会话。有很多方法可以获取屏幕截图然后流式传输,但我特别想了解为什么 RDP(远程桌面/终端服务与 VNC 体验如此不同。我使用的是 RDP vs . VNC 只是因为它们似乎使用截然不同的方法将屏幕流式传输到客户端。

如果我不得不猜测,RDP 似乎传输位图图形块(例如 100x100 像素)以构建完整图片(这可能很慢),但似乎将正常的绘制形状/填充或字体绘制传输到客户端非常快. VNC 似乎会拍摄屏幕的巨大快照,比较之前的图像并将更改流式传输到客户端。

我觉得 RDP 是一种比其他任何协议都更高质量和更流畅的协议,那么它使用什么技术来实现这一点?

编辑——澄清一下,我是在询问这些图形技术,特别是作为一种流协议编程方法——而不是使用哪种现有产品/技术来解决这个业务需求。

4

2 回答 2

10

正如您所发现的,它们在流变化的方式上都有很大的不同。MS 的 RDP 协议是可在线购买的ITU 标准 (T.128)的扩展。

RDP 实现了许多相辅相成的带宽节省技术,使其在低带宽上非常高效。

另一方面,VNC 具有非常基本的压缩技术:它将发送已更改的位图块,并将使用基本类型的压缩,从 RLE 到 jpeg 以有效地传输这些块。
不幸的是,在低带宽上它仍然相当浪费。

VNC 基本上不知道用于构建屏幕的底层图形基元。这使得它在任何机器上都易于使用,因为它只监视屏幕位图的变化。
另一方面,RDP 更深入地连接到 Windows API,并且能够根据在客户端上生成相同更新所需的最少信息量来优化其流。

如果你想集成远程桌面功能,你有几个选择:

  • 对于 RDP,您可以使用用于 Web 远程功能的 ActiveX。您可能想查看一个包装器以将其集成到您自己的软件中。
    如果您想更深入地了解这一点,可以使用 linux rdesktop客户端的源代码,该客户端确实通过 RDP 连接到 Windows 机器。

  • 对于 VNC,有许多开源实现。
    FogCreek 的 Copilot 实际上使用了一个,您可以获取它的源代码,因为它是基于TightVNC构建的

在 RDP和VNC上的CodeProject 上也有许多项目。

于 2009-02-12T06:01:54.273 回答
4

正如 Renaud 所说,VNC 只是逐块发送位图更改,而不知道内容是什么。RDP 更智能。

您可以从这两个规范中准确了解 RDP 的作用:

协议级别: http: //msdn.microsoft.com/en-us/library/cc240445 (PROT.10).aspx

图形级别: http: //msdn.microsoft.com/en-us/library/cc241537 (PROT.10).aspx

我认为RDP最大的收获来自:

  • 缓存:客户端可以存储大量以前看到的块,服务器可以告诉客户端如何使用它们。这些也是持久的,因此当客户端连接到它已经访问过的服务器时,它可以通告它在磁盘上的块。移动窗户时非常有用。窗口的许多部分,如标题栏也是相同的。

  • 线/块图。正如你所猜测的那样,RDP 具有线条、多边形和矩形绘图的操作。有了绘图窗口,这些就被大量使用了。

  • 字体绘图。RDP 有一种方法可以通过字形发送字体并告诉客户端渲染它们。

  • 光标渲染。光标图标作为字形发送。VNC 只是使用一个点

这些是浮现在脑海中的大问题。查看协议规范的第 2.2.7 节功能集以获取绘图功能的完整列表。

于 2009-08-22T20:42:17.053 回答