【Guacamole中文文档】二、用户指南 —— 1.实现和架构

实现和架构

Guacamole不是一个独立的web应用程序,它由许多部分组成。Web应用程序实际上意在简单和最小化,大部分繁重的工作都由底层组件执行。
图片源自官网

用户通过web浏览器连接到Guacamole服务端。JavaScript编写的Guacamole客户端通过Guacamole服务端的Web服务向用户提供服务。加载后,该客户端通过HTTP方式使用Guacamole协议连接回服务端。

部署在Guacamole服务上的Web应用程序读取Guacamole协议,并将其转发给guacd和本地的Guacamole代理。该代理实际解释Guacamole协议的内容,并代表用户连接任意数量的远程桌面服务。

Guacamole协议与guacd的结合提供了协议不可知性:Guacamole客户端和Web应用程序都不需要知道实际使用的是什么远程桌面协议。

Guacamole协议

Web应用程序完全不理解任何的远程桌面协议。它不包含支持VNC、RDP或任何其他Guacamole协议栈支持的协议。它实际上只能理解Guacamole协议,这是一种用于远程显示渲染和事件传输的协议。虽然具有这些属性的协议自然具有与远程桌面协议相同的功能,但远程桌面协议和Guacamole协议背后的设计原则是不同的:Guacamole协议并不旨在实现特定桌面环境特性。

作为一种远程显示和交互协议,Guacamole实现了现有远程桌面协议的超集。因此,在Guacamole中添加对特定远程桌面协议(如RDP)的支持需要编写一个中间层,用以在远程桌面协议和Guacamole协议之间进行“转换”。实现这种转换与实现任何本地客户端没有什么区别,只是这个特定的实现是呈现给远程显示的,而不是本地显示。

处理这个转换的中间层是guacd

guacd

guacd是Guacamole的核心,它动态加载对远程桌面协议(即“客户端插件”)的支持,并根据从Web应用程序接收到的指令将它们连接到远程桌面。

guacd是一个随着Guacamole一起安装的后台运行的守护进程,监听来自Web应用程序的TCP连接。guacd同样不理解任何特定的远程桌面协议,而是实现了足够多的Guacamole协议,以确定需要加载哪些协议支持,以及必须向其传递哪些参数。一旦加载了客户端插件,它将独立于guacd运行,并完全控制自己与Web应用程序之间的通信,直到客户端插件终止。

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

Web应用程序

用户实际与Guacamole交互的部分是web应用程序。

如前所述,Web应用程序不实现任何远程桌面协议。它依赖于guacd,只实现了一个漂亮的Web界面和身份验证层。

我们选择用Java实现Web应用程序的服务器端,但也可以用其他语言编写。事实上,因为Guacamole是一种API,我们鼓励这样做。

RealMint

虽然Guacamole现在是一种通用的远程桌面网关,但情况并非总是如此。Guacamole最初是一个纯基于文本的Telnet客户端,用JavaScript编写,名为RealMintRealMintterminal的一个字谜)。主要是作为一个演示而写,虽然它的目的是有用的,但它出圈主要是因为它是纯JavaScript实现的。

RealMint使用的隧道是用PHP编写的。与Guacamole的HTTP隧道不同,RealMint的隧道只使用简单的长轮询且效率低下。RealMint有一个不错的键盘实现,现存于Guacamole的部分键盘代码中,但实际上是RealMint的功能和可用性范围。

考虑到它只是一个遗留协议的实现,并且存在其他一些JavaScript终端模拟器,其中大多数都是成熟且稳定的,因此该项目被放弃。

VNC客户端

当开发者了解到HTML5画布标记,并看到它已经在Firefox和Chrome中实现的时候,就开始了JavaScript VNC客户端的概念验证工作。

该客户端纯粹是带有Java服务器组件的JavaScript代码,并通过将VNC转换为基于XML版本来工作。它的开发自然是出于VNC的功能,其用处仅限于将单个连接转发给一组用户。虽然相对较慢,但概念验证工作得很好,因此需要一个在线场地继续维持项目,所以在SourceForge上作为一个HTML5 VNC客户端注册了“Guacamole”。

随着Guacamole的成长,变得不再只是一种概念验证,对速度的需求也在增加,旧的RealMint风格的长轮询被放弃,XML的使用也被放弃。

由于WebSocket当时无得到信任支持,而且Java没有针对servlet的WebSocket标准,因此开发了一个等效的基于HTTP的隧道。如果WebSocket因任何原因无法使用,该隧道至今仍可以使用。

远程桌面网关

一种更快的基于文本的协议被开发出来,它可以呈现多种远程桌面协议的功能,而不仅仅是VNC。整个系统被重新构建成一个标准的守护进程guacd和一个公共库libguac,前者驱动了守护进程和协议支持,后者变得可扩展。

该项目的能力从一个合适的VNC客户端扩展到了一个高性能的HTML5远程桌面网关和通用API。在当前状态下,Guacamole可以用作中央网关,以访问运行不同远程桌面服务器的任意数量的机器。它提供了可扩展的身份验证,如果你需要更专业的东西,还提供了一个用于基于HTML5的远程访问的通用API。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值