摘要javascript
在网上看到一篇Guacamole官方手册的翻译,可是找不到后续,因而想本身也翻译几篇,有时间的话,会尽可能多翻译一些。第一篇就直接转载过来了。
Guacamole的介绍以及架构html
Guacamole不是一个独立的Web应用程序,而是由许多部件组成的。Web应用程序其实是整个项目里最小最轻量的,大部分的功能依靠Guacamole的底层组件来完成。java
用户经过浏览器链接到Guacamole的服务端。Guacamole的客户端是用javascript编写的,Guacamole server经过web容器(好比tomcat)把服务提供给用户。一旦加载,客户端经过http承载着Guacamole本身的定义的协议与服务端通讯。web
部署在Guacamole server这边的Web应用程序,解析到的Guacamole protocal,就传给Guacamole的代理guacd,这个代理(guacd)实际上就是解析Guacamole protocal,替用户链接到远程机器canvas
Guacamole protocal协议自己以及guacd的存在,实现了协议的透明:Guacamole客户端(浏览器运行的js)和Web应用程序,都不须要知道远程桌面具体用哪一个协议(VNC,RDP etc)浏览器
Guacamole protocal协议tomcat
Web应用程序是不知道任何远程桌面协议。应用程序不包含支持VNC,RDP等其余协议的Guacamole模块。应用程序只须要理解 Guacamole protocal协议,这个协议支持显示渲染和消息传输。尽管Guacamole protocal的这些功能与一个远程桌面协议相似,不过远程桌面协议和Guacamole protocal背后的设计原则是不同的:Guacamole protocal并非为了实现一个特定的桌面环境的远程功能。服务器
Guacamole protocal做为一个远程显示和交互协议,实现了现有的远程桌面协议的超集(superset)。为了让Guacamole支持一个新的远程桌面协议 (好比RDP),须要写一个中间层(middle layer)来实现Guacamole protocal和这个新协议的转换。实现这样的转换机制和本地客户端远程访问桌面的实现没什么区别,惟一的不一样是这个转换是要渲染远程的显示器(浏览 器),而不是本地客户端(好比real vnc)。架构
对,实现这个协议互相转换的中间层就是guacd。socket
guacd
guacd是Guacamole的“心脏”,插件式的动态支持远程桌面协议,根据Web应用程序发来的指令链接到远程桌面。
guacd是和Guzcamole一块儿被安装到机器的,以驻留后台进程形式提供代理服务,接收来自Web应用程序的Tcp链接。guacd一样也不 知道具体的远程桌面协议,它只是须要决定加载那个插件而且传送特定的参数给插件。(这个插件就是用来解析具体远程桌面协议的)一旦这个插件被加载,插件就 独立于guacd运行,对Web应用程序和本身之间的会话(conmunication)具备绝对的控制权,直到插件被关闭。
Web应用程序
在Guacamole中与用户打交道的就是Web应用程序。
以前说过,Web应用程序本身不实现任何的远程桌面协议。Web应用程序依赖guacd,只关心优美的界面以及权限认证。
Web应用程序用Java语言编写,对,只要你愿意,彻底能够用其余语言实现。由于,事实上,Guacamole被设计成API,咱们鼓励开发者使用API开发本身的应用。
RealMint
说到Guacamole,通常是指一个远程桌面的网关,可是也不彻底是这样。起初,Guacamole用javascript写了一个纯文本的Telnet客户端叫作:RealMint(RealMint是一个终端的名字)。这个项目主要是写了个示范程序,目的但愿它能有用,它一度声名鹊起是由于RealMint是只用javascript写的。
RealMint的隧道是用PHP写的。跟Guacamole的HTTP的隧道相比,RealMint的隧道用的是简单的长轮询技术,比较低效。RealMint有一个比较像样的键盘实现是保存至今,被应用到Guacamole的键盘部分的代码,也许这就是RealMint惟一保留下来的功能和特性。
鉴于RealMint只是实现了一个古老的协议(telnet),业界内还有几个其余的比较成熟稳定的javascript客户端模拟器的实现,RealMint这个项目就被遗弃了。
VNC Client
开发者一旦接触HTML5的canvas标签,就会发现这个标签Firefox和Chrome已经支持,并且开始替代哪些所谓的Javascript实现的VNC的客户端了。
彻底用javascript实现的客户端加上java服务器的组件,工做原理是把VNC协议转化成同样的基于XML的版本。这样的实现受限于 VNC的特性,没法把一个链接传送给多个用户。概念上的项目须要很好的线上环境,虽然发展有点滞后,一个HTML5的VNC客户端已经在SourceForge上以“Guacamole”的名字注册了。
当Guacamole慢慢发展,变得不只仅是一个概念上的产品时,需求快速增加,过去的像RealMint同样采起长轮询的XML的解决方案就慢慢被废弃了。
由于Websocket此时还没法被彻底信赖,Java有没有Websocket的servlets标准,一个替代品,基于HTTP的隧道解决方案应运而生。
远程桌面网关(Remote Desktop Gateway)
一个更快的基于文本的协议被提出,它能够支持现有的大多数的远程桌面协议,不只仅是VNC。整个系统被从新设计成一个标准的后台驻留进程(guacd)和一些公用的库文件(libguac),可扩展地支持远程桌面协议。
这个项目从一个完整的VNC客户端扩展成一个高性能的HTML5远程桌面网关以及通用API。目前,Guacamole被用作一个中心网关,能够支持链接任意数量的,运行着不一样远程桌面协议的机器。提供可扩展地认证体系,这样你能够作一些特定的适配,Guacamole也提供一个用户Html5远程 链接的通用API。
原文地址:http://www.cnblogs.com/yanghuahui/p/3241696.html