APP下载
报价宝  ›  科技  › 

基于HTML 5和JavaScript的VNC检视器--Guacamole实现原理和架构

报价宝 来源:baojiabao.com 发布时间:2019-11-18 09:53:00 10月01日更新
报价宝综合消息基于HTML 5和JavaScript的VNC检视器--Guacamole实现原理和架构

摘要

之前在搭建jumpserver的时候有用到了Guacamole,但是没有对Guacamole做一个详细的介绍,刚好在网上看到一篇Guacamole官方手册的翻译,所以整理了一些相关内容,下面介绍一下Guacamole的具体实现和架构。

Guacamole

Guacamole 是一个基于 HTML 5 和 JavaScript 的 VNC 检视器,服务端基于 Java 的 VNC-to-XML 代理开发。要求浏览器支援 HTML 5。目前该专案是 Apache 基金会的孵化专案。

该专案包含三个元件,分别是:

apache/incubator-guacamole-serverapache/incubator-guacamole-clientapache/incubator-guacamole-websiteGuacamole 是无客户端的远端桌面闸道器,Guacamole 支援标准协议,比如 VNC 和 RDP。

Guacamole 不要求任何外挂和客户端软件。

Guacamole 是提供远端桌面的解决方案的开源专案,通过浏览器就能操作虚拟机器,适用于Chrome,Firefox,IE10等浏览器(浏览器需要支援HTML5)。 由于使用 HTML5,Guancamole 只要在一个服务器安装成功,你访问你的桌面就是访问一个 web 浏览器。

Guacamole的介绍以及架构

Guacamole不是一个独立的Web应用程序,而是由许多部件组成的。Web应用程序实际上是整个专案里最小最轻量的,大部分的功能依靠Guacamole的底层元件来完成。

使用者通过浏览器连线到Guacamole的服务端。Guacamole的客户端是用javascript编写的,Guacamole server通过web容器(比如tomcat)把服务提供给使用者。一旦载入,客户端通过http承载着Guacamole自己的定义的协议与服务端通讯。

部署在Guacamole server这边的Web应用程序,解析到的Guacamole protocal,就传给Guacamole的代理guacd,这个代理(guacd)实际上就是解析Guacamole protocal,替使用者连线到远端机器。

Guacamole protocal协议本身以及guacd的存在,实现了协议的透明:Guacamole客户端(浏览器执行的js)和Web应用程序,都不需要知道远端桌面具体用哪个协议(VNC,RDP etc)

Guacamole protocal协议

Web应用程序是不知道任何远端桌面协议。应用程序不包含支援VNC,RDP等其他协议的Guacamole模组。应用程序只需要理解 Guacamole protocal协议,这个协议支援显示渲染和讯息传输。尽管Guacamole protocal的这些功能与一个远端桌面协议类似,不过远端桌面协议和Guacamole protocal背后的设计原则是不一样的:Guacamole protocal并不是为了实现一个特定的桌面环境的远端功能。

Guacamole protocal作为一个远端显示和互动协议,实现了现有的远端桌面协议的超集(superset)。为了让Guacamole支援一个新的远端桌面协议 (比如RDP),需要写一个中间层(middle layer)来实现Guacamole protocal和这个新协议的转换。实现这样的转换机制和本地客户端远端访问桌面的实现没什么区别,唯一的不同是这个转换是要渲染远端的显示器(浏览 器),而不是本地客户端(比如real vnc)。

而实现这个协议互相转换的中间层就是guacd。

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。

篇幅有限,关于Guacamole的内容就介绍到这了,后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~

文章标签: 报价宝 降噪耳机价格 耳机价格 红米手机价格 华为手机价格 小米手机价格 电视机价格 笔记本电脑价格 笔记本价格 汽车价格 数码相机价格 手机价格 笔记本电脑价格 红米手机价格 降噪耳机价格