Guacamole——1.实现和架构

摘要

在网上看到一篇Guacamole手册的翻译,但是找不到后续,于是想自己也翻译几篇,有时间的话,会尽量多翻译一些。第一篇就直接转载过来了。

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。

原文地址:http://www.cnblogs.com/yanghuahui/p/3241696.html

时间: 2024-11-07 08:58:20

Guacamole——1.实现和架构的相关文章

下载-深入浅出Netty源码剖析、Netty实战高性能分布式RPC、NIO+Netty5各种RPC架构实战演练三部曲视频教程

下载-深入浅出Netty源码剖析.Netty实战高性能分布式RPC.NIO+Netty5各种RPC架构实战演练三部曲视频教程 第一部分:入浅出Netty源码剖析 第二部分:Netty实战高性能分布式RPC 第三部分:NIO+Netty5各种RPC架构实战演练

sqlserver 全库查询 带架构

网上现有的全库查询,无法识别自定义架构的数据库结构: declare @str nvarchar(10) declare @tablename varchar(50) declare @colname varchar(50) declare @counts int declare @sql nvarchar(2000)--以上定义变量 declare cur1 cursor for select a.name tablename,B.name colname from sys.objects a

Java精品高级课,架构课,java8新特性,P2P金融项目,程序设计,功能设计,数据库设计,第三方支付,web安全,视频教程

36套精品Java架构师,高并发,高性能,高可用,分布式,集群,电商,缓存,性能调优,设计模式,项目实战,P2P金融项目,大型分布式电商实战视频教程 视频课程包含: 高级Java架构师包含:Spring boot.Spring  cloud.Dubbo.Elasticsearch,Redis.ActiveMQ.Nginx.Mycat.Spring.MongoDB.ZeroMQ.Git.Nosql.Jvm.Mecached.Netty.Nio.Mina.java8新特性,P2P金融项目,程序设计,

搭建连接MySql的三层架构的ASP.NetCore2.0的WebApi

里我们用三层架构搭建一个连接MySql的ASP.netCore模板的WebApi项目 首先添加WebApi项目(ASP.NetCore版本) 右键解决方案>新建项目> 选择Web>ASP.NET Core Web应用程序(.NET Core) 选择Web API 此时的目录结构: 添加实体层Entity 右键添加>新建项目>.Net Core类库 添加后的目录结构 BaseEntity: using System; using System.Collections.Gener

linux运维、架构之路-Lnmp架构部署

一.Lnmp架构原理 二. Lnmp架构软件安装 1.Nginx安装脚本 #!/bin/bash useradd -s /sbin/nologin -M www mkdir -p /server/tools/ cd /server/tools/ wget http://nginx.org/download/nginx-1.10.3.tar.gz tar xf nginx-1.10.3.tar.gz yum install pcre-devel openssl-devel -y cd /home/

微信红包的架构设计简介

@来源于QCon某高可用架构群整理,整理朱玉华. 背景:有某个朋友在朋友圈咨询微信红包的架构,于是乎有了下面的文字(有误请提出,谢谢) 概况:2014年微信红包使用数据库硬抗整个流量,2015年使用cache抗流量. 微信的金额什么时候算? 答:微信金额是拆的时候实时算出来,不是预先分配的,采用的是纯内存计算,不需要预算空间存储.. 采取实时计算金额的考虑:预算需要占存储,实时效率很高,预算才效率低. 实时性:为什么明明抢到红包,点开后发现没有? 答:2014年的红包一点开就知道金额,分两次操作

秒杀系统架构分析与实战

0 系列目录 秒杀系统架构 秒杀系统架构分析与实战 1 秒杀业务分析 正常电子商务流程 (1)查询商品:(2)创建订单:(3)扣减库存:(4)更新订单:(5)付款:(6)卖家发货 秒杀业务的特性 (1)低廉价格:(2)大幅推广:(3)瞬时售空:(4)一般是定时上架:(5)时间短.瞬时并发量高: 2 秒杀技术挑战 假设某网站秒杀活动只推出一件商品,预计会吸引1万人参加活动,也就说最大并发请求数是10000,秒杀系统需要面对的技术挑战有: 对现有网站业务造成冲击 秒杀活动只是网站营销的一个附加活动,

B/S网络架构

B/S基于统一的应用层协议HTTP来交互数据,目前的B/S网络架构大多采用如图所示的架构设计,既要满足海量用户访问请求,又要保持用户请求的快速响应. 当一个用户在浏览器输入www.taobao.com这个URL时,将会发生很多操作.首先它会请求DNS把这个域名解析成对应的IP地址,然后根据这个IP地址在互联网中找到对应的服务器,向这个服务器发起一个get请求,由这个服务器决定返回默认的数据资源给访问的用户.在服务器端实际上还有很复杂的业务逻辑:服务器可能有很多台,到底指定哪台服务器来处理请求:还

mysql性能调优与架构设计笔记

1.mysql基本介绍 mysql支持多线程高并发的关系型数据库; 数据库存储引擎InnoDB.MyISAM; mysql快速崛起的原因就是他是开源的; 性能一直是mysql自豪的一大特点; 2.mysql架构组成 麻雀虽小五脏俱全,mysql虽然简单但其内部结构并不简单; mysql物理文件组成之日志文件: 错误日志error log这里记录mysql运行时严重的警告和错误,以及mysql启动和关闭的日志信息 二进制日志 binary log 记录mysql运行时所有的query和query执