Guacamole之實現和架構(一)


摘要

在網上看到一篇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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM