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. Team City的安装1

    持续集成工具 Team City的安装 前两个月很大一部分精力投入在做部门的持续集成,从概念的了解和工具的选型,再到安装,部署,操作,到最后的真实项目持续集成应用的上线,写了一份手册,包括安装,配置, ...

  2. Qt 如何处理拖放应用程序参数时,中国

    你用 Qt 我们开发的应用程序.用户拖放文件到您的 exe 在.启动应用程序,在这个时候, main() 功能参数可以接收中国.如何正确处理它?非常easy,码如下面: QTextCodec *cod ...

  3. [Unity3D]Unity3D游戏开发Android内嵌视图Unity查看

    ---------------------------------------------------------------------------------------------------- ...

  4. 如何把一个c语言程序做成windows服务开机自启动

    原文:如何把一个c语言程序做成windows服务开机自启动 目前写的程序是一个用c语言实现socket侦听的,那么如何把这个程序做成开机自启动呢? 我们是通过vs6.0,编译后生成了.exe文件,然后 ...

  5. jQuery.extend()源码解读

    // extend方法为jQuery对象和init对象的prototype扩展方法// 同时具有独立的扩展普通对象的功能jQuery.extend = jQuery.fn.extend = funct ...

  6. Critical thinking and Thoughtful writing

    Critical thinkers are able to : Articulate their ideas clearly and persuasively in writing Understan ...

  7. 调试经验--硬盘U菜

    调试经验--硬盘U菜 随着嵌入式设备功能的开发,随着对存储设备的需求:需要存储大量数据信息.需要在转储数据,U盘升级功能等.     在使用存储设备的过程中,我们遇到一些问题,也总结了些经验: 1.几 ...

  8. sql性能

    ---正在运行的 select a.username, a.sid,b.SQL_TEXT, b.SQL_FULLTEXT   from v$session a, v$sqlarea b where a ...

  9. POJ 1284 Primitive Roots 原根

    题目来源:POJ 1284 Primitive Roots 题意:求奇素数的原根数 思路:一个数n是奇素数才有原根 原根数是n-1的欧拉函数 #include <cstdio> const ...

  10. SQL点滴1—SET QUOTED_IDENTIFIER OFF语句的作用

    原文:SQL点滴1-SET QUOTED_IDENTIFIER OFF语句的作用 先看下面几个sql语句 代码   SELECT * FROM [USER]    WHERE a= 'netasp' ...