guacamole开发者文档——guacamole概述

/ 工具 / 1 条评论 / 1868浏览

guacamole开发者文档——guacamole概述

1

guacamole概述

Guacamole 是一个以 HTML5 为基础的网页应用程序(web application),内部有guacamole自己的协议。整体被分为两部分,服务器端server和用户端client,其中服务器端负责提供内部重要的协议程序,客户端负责与servlet容器对接,容器一般选用tomcat。

使用者通过自己电脑上的浏览器来连接guacamole的服务器,guacamole的客户端程序是用Java script编写的。Guacamole server通过web容器(比如tomcat)把服务提供给用户,用户一旦登录界面,客户端通过http承载着Guacamole自己的定义的协议与服务端通信。

这个网页应用程序并配合远程桌面又开发了一套API , 用于自己的网页应用程序。尤其是要将 HTML5 远程操控电脑的功能,整合至现有的应用程序或系统架构时,这样的 API 会是一个非常有用的工具。 Guacamole API 提供了一个以 JavaScript 为基础的通道(并非使用 WebSocket),让你可以很方便且有效率的做文字资料的串(streaming),另外它也实做了一个支持 Guacamole 传输协议的 client,这个 client 可以接收经过通道传输的 Guacamole 串流资料,然后将远程电脑的画面呈现在浏览器中。 另外,这个 API 也提供跨浏览器的鼠标与键盘事件(events)、屏幕键盘与支持硬件加速 compositing 的 synchronized nestable layers。

guacamole协议:

Guacamole 网页应用程序本身并不支持任何远程桌面的通讯协议,当然也不支持 VNC 或 RDP 等,它本身只有支持自己的 Guacamole 传输协议,这个协议包含远程画面的绘制(remote display rendering)与事件(event)的传递,然而一个包含这两种功能的协议事实上就跟一般的远程桌面协议有同等的功能,只是 Guacamole 协议在设计理念上跟一般的远程桌面协议有些不同,Guacamole 的目标是希望可以相容于各种桌面环境。 Guacamole 中实作了各种远程桌面协议中的功能,并且加入一些特定的远程桌面协议支持(例如 RDP 与 VNC 等)

而一般的远程桌面协议与 Guacamole 之间则是通过一个 middle layer 来转换,实作这个转换的程序实际上就是撰写一个远程桌面的客户端(client),只不过将原本显示在本机的画面通过 Guacamole 协议传送到远程。

guacd:

guacd 就是上述 middle layer 中负责转换的程序,这个程序是 Guacamole 最主要的核心,它可以动态载入各种不同的远程桌面协议支持(也称为 client plugin),并且使用这些协议依照网页应用程序所传回的指令,连线到远程被控制的电脑。这个 guacd 不直接支持任何远程桌面协议,而是只有支持基本的 Guacamole 协议,在需要的时候才去载入指定的远程桌面协议 client plugin。 当 guacd 载入 client plugin 之后,client plugin 会自己独立执行,并且全权控制所有与网页应用程序之间的连线,直到 client plugin 执行结束为止。

guacd和所有的客户端插件都依赖于一个公共库libguac,这使得通过Guacamole协议的通信更容易。

Web应用程序

用户实际与之互动的Guacamole部分是Web应用程序。如前所述,Web应用程序不实现任何远程桌面协议。 它依赖于guacd,并且只实现一个spiffy web界面和身份验证层。我们选择用Java实现Web应用程序的服务器端,其他语言也可以实现。

RealMint

Guacamole现在是一个通用的远程桌面网关,但并不总是这样。 Guacamole开始是一个纯文本的Telnet客户端,用JavaScript编写,称为RealMint。 它主要是作为一个示范,是纯JavaScript。

RealMint使用的隧道是用PHP编写的。 与Guacamole的HTTP隧道相反,RealMint的隧道仅简单的使用并且效率低下。 RealMint有一个不错的键盘实现,现在应用于Guacamole的键盘代码的一部分。*考虑到它只是一个遗留协议的实现,并且存在几个其他JavaScript终端模拟器,其中大多数已经完善和稳定,该项目被放弃。

VNC客户端

一旦开发人员了解了HTML5 canvas标签,就会发现它已经在Firefox和Chrome中实现,工作就开始在概念验证JavaScript VNC客户端上。

这个客户端是具有Java服务器组件的JavaScript,并且通过将VNC翻译为基于XML的版本来工作。其开发自然由VNC的功能驱动,其范围仅限于将单个连接转发给一组用户。虽然相对缓慢,概念证明工作得很好,工程需要在线运行,并在SourceForge注册为“Guacamole” - 一个HTML5 VNC客户端。

随着Guacamole的发展和成为一个概念验证,伴随速度的需求增加,旧的RealMint被取消,使用XML。 由于WebSocket当时不被信任支持,而Java没有Servlet的WebSocket标准,因此开发了一个等效的基于HTTP的隧道。如果WebSocket由于任何原因不能使用,此隧道今天仍然使用。

远程桌面网关

开发了一种更快的基于文本的协议,其可以呈现多个远程桌面协议的特征,而不仅仅是VNC。 整个系统被重新划分为一个标准守护进程guacd,和一个公共库libguac,它驱动守护进程和协议支持,这种支持变得可扩展。

项目范围从一个VNC客户端扩展到高性能HTML5远程桌面网关和通用API。 在当前状态下,Guacamole可以用作访问运行不同远程桌面服务器的任意数量的计算机的中央网关。 它提供了可扩展的身份验证,在这种情况下,需要更专业的基于HTML5的远程访问的通用API。