RealVNC如何工作?

时间:2011-01-28 21:18:52

标签: vnc

我想知道RealVNC远程查看器的工作原理。

它经常会将屏幕截图实时发送给客户端吗?

还是使用其他方法?

5 个答案:

答案 0 :(得分:8)

作为一个非常高级的概述,有两种类型的VNC服务器:

  1. 屏幕敛。这些服务器将当前显示捕获到缓冲区,将其与客户端状态进行比较,并将仅发送不同的矩形
  2. 挂钩辅助。连接到显示更新过程,当显示管理器或OS更改屏幕时,将通知这些服务器。然后,他们可以使用该信息仅将更改的矩形发送给客户端。
  3. 在这两种情况下,它实际上都是屏幕更新流;但是,只有屏幕的已更改区域才会传输到客户端。根据所使用的VNC协议的版本,也可以压缩这些更新。

    (请注意,客户端可以随时请求完整的屏幕更新,但如果整个屏幕发生更改,服务器将自行执行此操作。)

    此外,屏幕更新并不是唯一传输的内容。服务器可以使用单独的通道发送剪贴板更新和鼠标位置更新(因为远程机器上的物理用户也可以移动鼠标)。

答案 1 :(得分:5)

  

协议的显示方面是   基于单个图形   原语:“放一个矩形的像素   给定x,y位置的数据“。在   乍一看,这似乎是一个   绘制许多用户的效率低下的方法   界面组件。然而,   允许各种不同的编码   对于像素数据给我们一个大的   如何交易的灵活程度   关闭各种参数,如网络   带宽,客户端绘图速度和   服务器处理速度。一系列的   这些矩形构成一个帧缓冲   更新(或只是更新)。更新   代表一个有效的变化   帧缓冲状态到另一个,所以在   有些方法类似于框架   视频。更新中的矩形是   通常不相交,但事实并非如此   必然如此。

阅读here了解更多信息

答案 2 :(得分:4)

是。它只是发送某种截图(压缩并重复使用上一屏幕截图的未更改部分)。

这是VNC协议的方式,任何客户端都以这种方式工作(虽然压缩图像的实际方式等可能会改变)。

答案 3 :(得分:2)

本质上,服务器将帧缓冲更新发送到客户端,客户端将键盘和鼠标输入以及帧缓冲区更新请求发送到服务器。

帧缓冲区更新消息可以具有不同的编码,但实质上它们是表示像素数据的方形屏幕区域的不同方式。通常,客户端要求整个屏幕的帧缓冲更新,但它只能询问屏幕的某个区域(例如,小屏幕客户端显示服务器屏幕的视口)。然后,服务器发送一个FBU(帧缓冲区更新),其中包含自上次FBU发送到客户端后屏幕已更改的矩形。

RFB / VNC协议的最佳参考是here。 IETF最近(2011年)标准文件RFC 6143涵盖了RFB,尽管它不是一个广泛的参考指南。

答案 4 :(得分:1)

它基本上可以通过即时发送屏幕截图来实现。 (“实时”在这里有一个用词不当,因为没有明确的截止日期。)它确实尝试通过仅发送已更改的屏幕区域进行优化,并且VNC代码行的某些分支使用镜像驱动程序来接收当显示区域被写入时的通知,而其他人使用窗口消息钩子来检测重绘请求。