Guacamole 介绍以及架构

 

目前在从事一些虚拟化解决方案方面的工作,最近项目有需求,希望能在浏览器上远程操作虚拟机。 此时发现了Guacamole,一个提供远程桌面的解决方案的开源项目,通过浏览器就能操作虚拟机,适用于Chrome,Firefox,IE10等浏览器(浏览器需要支持HTML5)。我只是对Guacamole做了些修改,适配目前的项目,比如做成自动登录的,加上项目权限验证等。

Guacamole有比较完善的英文wiki,中文的文档相对较少,故有此想法,学习应用的同时尝试着翻译下,加深理解。

英文wiki:http://guac-dev.org/doc/gug/guacamole-architecture.html

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...(待续)

转载请以链接形式标明本文地址

-- 杨华辉 Switching and Intelligent Control Research Center Beijing University of Posts and Telecommunications E-mail: huahuiyang(at)gmail.com
 
 
标签: GuacamoleVNCRDPIaaS

Guacamole 介绍的更多相关文章

  1. Guacamole 介绍以及架构

    Guacamole的介绍以及架构 guacd Web应用程序 在Guacamole中与用户打交道的就是Web应用程序. 之前说过,Web应用程序自己不实现任何的远程桌面协议.Web应用程序依赖guac ...

  2. SpringBoot整合Guacamole教程

    前言 本文主要介绍的是SpringBoot如何整合Guacamole在浏览器是远程桌面的访问. Guacamole 介绍 Apache Guacamole 是一个无客户端远程桌面网关.它支持标准协议, ...

  3. webvnc利器-noVNC集成实战

    我们在做一个虚拟机管理平台,底层虚拟化使用KVM,我们希望在网页上操作虚拟机. 一开始用applet嵌在网页内实现webvnc,不过由于applet的在浏览器上运行安全性限制,我们需要一个新的方案.此 ...

  4. Guacamole之实现和架构(一)

    摘要 在网上看到一篇Guacamole官方手册的翻译,但是找不到后续,于是想自己也翻译几篇,有时间的话,会尽量多翻译一些.第一篇就直接转载过来了. Guacamole的介绍以及架构 Guacamole ...

  5. guacamole 0.9.9安装与配置

    以下命令很多都需要管理权限,建议使用管理员账号执行,遇到问题可以留言. 1.首先需要安装guacamole所需要的依赖库 必需安装的库有:Cairo.libjpeg-turbo.libpng.OSSP ...

  6. Fedora 19下Guacamole的安装使用

    由于我要使用RDP实现web远程桌面,因此需要用到了Guacamole这个开源的软件.之前用Ubuntu12.04折腾了一晚上,也没有找到依赖库文件,而Guacamole的官方安装说明却没有介绍这个依 ...

  7. guacamole 基本学习使用

    基本介绍: Guacamole 是一个基于 HTML 5 和 JavaScript 的 VNC 查看器,服务端基于 Java 的 VNC-to-XML 代理开发.要求浏览器支持HTML5. Apach ...

  8. guacamole 0.9.13安装与配置

    以下命令很多都需要管理权限,建议使用管理员账号执行,遇到问题可以留言. Guacamole官网文档介绍翻译:http://www.cnblogs.com/ji-yun/p/5657709.html 1 ...

  9. Guacamole 远程桌面

    本文将Apache的guacamole服务的部署和应用,http://guacamole.apache.org/doc/gug/  该链接下有全部相关知识的英文文档,如果水平ok,可以去这里仔细查看. ...

随机推荐

  1. PHP_零基础学php_2变量、预定义变量、预定义常量、表达式、运算符、程序控制流程

    1.变量 PHP中使用$后跟变量名表示一个变量,变量名区分大小写. 变量的数据类型 整数类型 浮点类型 字符串类型 布尔类型 数组类型 对象 <html> <head> < ...

  2. 跟着大神重写的KNN 文档归类小工具

    ·背景 在知道KNN之前,楼主有时候会粗糙地做一些分类模型的计算.在拜读了Orisun大神[http://www.cnblogs.com/zhangchaoyang/articles/2162393. ...

  3. mono for android 学习记录

    C#开发Android应用实战(全 扫描 中文版) 学习记录: 拖完控件后,不要急着按F5,需要重新生成,才能自动修改 Resource.Designer.cs 文件 1. Activity 是基于a ...

  4. AngularJS系列之总结

    AngularJS深入的系列就是这九篇博客了,把我以前在项目中应用到的和自己学习的都总结在了里面.为了更方便的看,把我写的AngularJS系列的博客都列到下面.之后就开始学习ionic:html5移 ...

  5. ASP.NET 依赖注入。

    ASP.NET 依赖注入. http://www.it165.net/pro/html/201407/17685.html 我在网上看到了这篇文章,这边文章主要说的方法就是通过读取配置文件来解决依赖注 ...

  6. JAVA学习篇--Java类加载

    由来: 与普通程序不同的是,Java程序(class文件)并非本地的可执行程序(解释性语言). 当执行Java程序时.首先执行JVM(Java虚拟机),然后再把Javaclass载入到JVM里头执行, ...

  7. css中字符换行的一些问题

    -------我们在处理文章的内容的过程中由于文章内容混杂有中文.英文.数字等其他字符,而我们常见的英文和数字是无法在包裹元素中自动换行,这往往会导致元素被撑破,如下图所示: css中word-bre ...

  8. 2.4 LINQ中使用where子句指定筛选条件

    本篇讲解的内容有: 使用where筛选过滤LINQ查询 带逻辑的where筛选 多个where筛选子句 [1.使用where筛选过滤LINQ查询] 通常一个LINQ查询不会如前面的示例代码这么简单,经 ...

  9. APUE学习笔记(2):lseek()练习与文件洞

    对于lseek函数早在大一的C语言课上就有接触,但是几乎没有使用过,只记得是和文件偏移操作相关的 看了APUE上的示例,又使用od工具查看了内容,果然很神奇,很新鲜 figure3.2.c [c] # ...

  10. CodeSmith开发系列资料总结

    CodeSmith开发系列资料总结 最近跟同事在研究CodeSmith,感觉中文文档是少之又少,所以我们自己写(翻译)了一些文档,总结如下,希望对使用CodeSmith的朋友有所帮助: “努力学习的熊 ...