利用远程帧缓冲协议实现VNC远程控制
立即解锁
发布时间: 2025-08-22 00:27:36 阅读量: 1 订阅数: 2 


WebSocket技术全解析:从入门到实践
### 利用远程帧缓冲协议实现 VNC 远程控制
#### 1. 虚拟网络计算(VNC)概述
在过去几十年里,桌面计算模式广受欢迎。流行的桌面操作系统通常具备网络窗口系统和远程访问协议,方便用户通过终端和其他 PC 使用系统。随着个人计算机的兴起,桌面应用程序大量涌现,其中许多已成为遗留应用,且并非所有遗留应用都有可替代方案。
VNC 为用户和系统提供了一种标准方式,可在不考虑操作系统兼容性的情况下继续访问遗留应用和系统。它还能让用户像使用本地计算机一样远程与其他计算机上的系统和应用进行交互。
VNC 用途广泛,在软件开发环境中,可在多种操作系统、应用程序及其版本组合下测试应用,无需离开自己的桌面。例如,可在任何系统的任何浏览器(包括遗留浏览器)中测试基于 WebSocket 的新 STOMP 或 XMPP 应用。在协作或教育场景中,VNC 也非常有用,不仅能实现屏幕共享,还能让用户访问他人桌面以协助使用特定应用。
常见的远程访问桌面协议有多种,部分是特定平台的,如微软的远程桌面协议(RDP)、X Window 系统(X11,适用于 UNIX、Linux 和 Mac OS X)、Chromoting(适用于 Google Chromebook)、苹果远程桌面(ARD)和 NX(适用于 Linux 和 Solaris);另一些则是跨平台的,如远程帧缓冲(RFB)。
VNC 是基于 RFB 协议的开源技术,具有平台独立性。RFB 是 IETF 规范,是许多 VNC 服务器的基础,且有活跃的社区提供优化支持。不过,VNC 协议在 Web 应用中表现不佳,虽然有用于远程桌面访问的 AJAX 应用,但由于 HTTP 的请求 - 响应通信方式不适合传输这些协议,效果并不理想。远程桌面应用本质上是双向的,用户可随时进行输入操作,显示也可随时更新,因此双向传输层协议对高效的远程桌面应用至关重要。借助 WebSocket,可将远程桌面应用引入纯 HTML5 环境。
#### 2. 远程帧缓冲协议(RFB)概述
RFB 协议是 IETF 的信息规范(RFC 6143),虽不是官方标准,但应用广泛且有许多可互操作的实现。该规范已有十多年历史,经过多次修订。
帧缓冲是包含图形计算机系统显示的所有像素值的数组,是桌面计算机的最低通用模型。RFB 是远程访问帧缓冲的一种方式,对于任何配备键盘、鼠标和屏幕的系统,都可能通过 RFB 进行访问。
RFB 协议设计为让服务器承担主要工作,使客户端简单轻便。基于 RFB 协议构建的客户端是无状态的,即客户端断开并重新连接后,新会话不会丢失帧缓冲的状态。
#### 3. 二进制和文本导向协议
协议通常分为面向二进制数据或文本字符串两类。二进制协议比文本导向协议更紧凑,能自然地嵌入图像、音频和视频等任意二进制数据结构。它旨在由机器读取,可优化数据结构以提高传输效率。
像 STOMP 和 XMPP 这样的文本导向协议,传输的消息相对较大,解析成本较高。但文本导向协议几乎可由任何语言实现,人类可读,且具有灵活的可变长度字段。虽然二进制协议传输数据更高效,但文本导向协议更具灵活性,实现和部署也更简单。
RFB 是传输二进制图像数据的二进制协议,数据可压缩并以高频更新的方式在服务器和客户端之间流式传输。服务器可高频流式传输图像数据,客户端也可生成由用户鼠标移动和按键操作引起的输入事件流,这些输入事件以二进制格式紧凑编码,传输所需字节数极少。WebSocket 协议可处理二进制数据或文本字符串,因此二进制 WebSocket 消息非常适合 RFB 协议。
#### 4. 选择使用基于 WebSocket 的 RFB
构建自己的远程访问协议虽可行,但使用广泛应用、开放且可互操作的协议能带来巨大好处。例如,有许多基于 RFB 的跨平台 VNC 服务器,且不断有开发者社区进行优化和增强。随着新操作系统的发展和版本更新,可借助社区优势,专注于应用本身的功能实现。
以下是一个使用 VNC 和 RFB 协议通过 WebSocket 查看并控制另一台计算机屏幕的基本示例:
```mermaid
graph LR
A[RFB 客户端(浏览器)] -- WebSocket --> B[WebSocket 到 TCP 代理]
B -- TCP --> C[RFB(VNC)服务器]
```
#### 5. 构建基于 WebSocket 的 VNC(RFB)客户端
客户端应用分为两层:
- **协议库(RfbClient.js)**:用 JavaScript 实现 RFB 协议,处理所有兼容服务器都能理解的 RFB 语法。
- **用户界面**:由 vnc.html、ui.js 和 vnc.css 组成,分别定义页面结构、应用行为和外观。
服务器端使用 Node.js 脚本将 WebSocket 连接代理为 TCP 连接,该代理连接到运行在远程桌面的后端 RFB 服务器。
#### 6. 设置代理服务器
RFB 是使用 TCP 作为传输层的应用层协议。使用标准 TCP 协议通过 WebSocket 时,可选择升级服务器以接受 WebSocket 连接,或使用代理在 WebSocket 和 TCP 之间进行中继。
以下是代理服务器代码示例:
```javascript
var websocket = require("./websocket-example");
var net = require("net");
var remotePort = 5900;
var remoteHost = "192.168.56.101";
websocket.listen(8080, "localhost", function(w
```
0
0
复制全文
相关推荐










