淺析如何實現瀏覽器訪問遠端桌面/伺服器介面:NoVNC - 以Web方式交付VNC遠端連線
最近專案需要實現那種線上實訓平臺,所以會記錄一下技術選型然後學到的瞭解到的相關東西。看下這篇知乎文章:實驗樓這個網站是怎樣實現的線上linux虛擬機器?https://www.zhihu.com/question/29557878,這裡面有涉及一些思路。
華為雲也有個沙箱實驗室的東西,如圖:
我估計華為雲的這個沙箱實驗室這種就是通過這種 NoVNC 遠端連線實現的,看右邊還有一個類似虛擬機器桌面。
一、VNC介紹
VNC (Virtual Network Console)是虛擬網路控制檯的縮寫,它是一款優秀的遠端控制工具軟體。VNC 是在基於 UNIX和 Linux作業系統的免費的開源軟體,遠端控制能力強大,高效實用,其效能可以和 Windows和 MAC中的任何遠端控制軟體媲美。
VNC基本上是由兩部分組成:一部分是客戶端的應用程式(vnc viewer);另外一部分是伺服器端的應用程式(vnc server)。
VNC的基本執行原理和一些Windows下的遠端控制軟體很相像。VNC的伺服器端應用程式在UNIX和Linux作業系統中適應性很強,圖形介面十分友好。在任何安裝了客戶端的應用程式(vncviewer)的Linux平臺的計算機都能十分方便地和安裝了伺服器端的應用程式(vncserver)的計算機相互連線。
二、noVNC介紹
noVNC提供一種在網頁上通過html5的Canvas,訪問機器上vncserver提供的vnc服務,需要做tcp到websocket的轉化,才能在html5中顯示出來
網頁就是一個客戶端,類似win下面的vncviewer,只是此時填的不是裸露的vnc服務的ip+port,而是由noVNC提供的websockets的代理,在noVNC代理伺服器上要配置每個vnc服務,noVNC提供一個標識,去反向代理所配置的vnc服務。
noVNC 被普遍用在各大雲端計算、虛擬機器控制面板中,比如 OpenStack Dashboard 和 OpenNebula Sunstone 都用的是 noVNC。
三、具體示例
NoVNC—以Web方式交付VNC遠端連線:https://blog.csdn.net/qq_37242520/article/details/103688221,這篇文章比較詳細,可以參考。
還有一種就是 csdn 的跟我練專案,起初我也以為是通過這種 noVNC 的形式遠端連線的,後來發現不是,原來是使用 xterm.js 實現的一個簡易的 web-terminal。而我們要做的就是這種 shell 的模式,遠端桌面不是我們想要的,所以轉而研究 xterm。