摘要javascript
在網上看到一篇Guacamole官方手冊的翻譯,可是找不到後續,因而想本身也翻譯幾篇,有時間的話,會盡可能多翻譯一些。第一篇就直接轉載過來了。
Guacamole的介紹以及架構html
Guacamole不是一個獨立的Web應用程序,而是由許多部件組成的。Web應用程序其實是整個項目裏最小最輕量的,大部分的功能依靠Guacamole的底層組件來完成。java
用戶經過瀏覽器鏈接到Guacamole的服務端。Guacamole的客戶端是用javascript編寫的,Guacamole server經過web容器(好比tomcat)把服務提供給用戶。一旦加載,客戶端經過http承載着Guacamole本身的定義的協議與服務端通訊。web
部署在Guacamole server這邊的Web應用程序,解析到的Guacamole protocal,就傳給Guacamole的代理guacd,這個代理(guacd)實際上就是解析Guacamole protocal,替用戶鏈接到遠程機器canvas
Guacamole protocal協議自己以及guacd的存在,實現了協議的透明:Guacamole客戶端(瀏覽器運行的js)和Web應用程序,都不須要知道遠程桌面具體用哪一個協議(VNC,RDP etc)瀏覽器
Guacamole protocal協議tomcat
Web應用程序是不知道任何遠程桌面協議。應用程序不包含支持VNC,RDP等其餘協議的Guacamole模塊。應用程序只須要理解 Guacamole protocal協議,這個協議支持顯示渲染和消息傳輸。儘管Guacamole protocal的這些功能與一個遠程桌面協議相似,不過遠程桌面協議和Guacamole protocal背後的設計原則是不同的:Guacamole protocal並非爲了實現一個特定的桌面環境的遠程功能。服務器
Guacamole protocal做爲一個遠程顯示和交互協議,實現了現有的遠程桌面協議的超集(superset)。爲了讓Guacamole支持一個新的遠程桌面協議 (好比RDP),須要寫一箇中間層(middle layer)來實現Guacamole protocal和這個新協議的轉換。實現這樣的轉換機制和本地客戶端遠程訪問桌面的實現沒什麼區別,惟一的不一樣是這個轉換是要渲染遠程的顯示器(瀏覽 器),而不是本地客戶端(好比real vnc)。架構
對,實現這個協議互相轉換的中間層就是guacd。socket
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