国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 服務(wù)器 > Web服務(wù)器 > 正文

no-vnc和node.js實(shí)現(xiàn)web遠(yuǎn)程桌面的完整步驟

2024-09-01 13:42:04
字體:
供稿:網(wǎng)友

引言

項(xiàng)目需求,要求在瀏覽器端進(jìn)行遠(yuǎn)程桌面的訪問,如圖所示:

實(shí)現(xiàn)遠(yuǎn)程桌面,需要依賴VNC協(xié)議:

VNC(Virtual Network Computing),為一種使用RFB協(xié)議的屏幕畫面分享及遠(yuǎn)程操作軟件。此軟件借由網(wǎng)絡(luò),可發(fā)送鍵盤與鼠標(biāo)的動作及即時(shí)的屏幕畫面。

相關(guān)的參考比較少,去谷歌搜索出來的文章大多都是如何使用客戶端進(jìn)行VNC的搭建與訪問,很少有將其內(nèi)嵌到web里的,騰訊云有相關(guān)的功能,但因?yàn)闃I(yè)務(wù)安全性,咱也看不著人家咋實(shí)現(xiàn)的。

再見,百度。用百度查了一次之后,我才知道原來VNC是口紅。

所以VNC實(shí)踐之路就是如下流程:

根據(jù)自己已有的知識與技能,設(shè)計(jì)一個(gè)VNC方案。 嘗試,分析可行性。 根據(jù)可行性修改方案細(xì)節(jié),或推翻方案重新設(shè)計(jì)。

從整體的最開始設(shè)計(jì),到最終落地方案,大約經(jīng)歷了以下七個(gè)方案的迭代:

SpringBoot調(diào)用REALVNC的C++類庫,前后臺進(jìn)行數(shù)據(jù)交互。失敗,因?yàn)镽EALVNC太貴了,客戶承受不起。 SpringBoot中模仿TightVNC實(shí)現(xiàn)JavaViewer獲取數(shù)據(jù),前后臺進(jìn)行數(shù)據(jù)交互。失敗,因?yàn)門ightVNC JavaViewer的源碼沒注釋,看不懂。 SpringBoot中手寫VNC客戶端,前后臺數(shù)據(jù)交互。失敗,因?yàn)閺?實(shí)現(xiàn)一個(gè)協(xié)議太復(fù)雜了,時(shí)間成本太高。 瀏覽器端只做VNC鏈接,使用原生客戶端,直接訪問主機(jī)。失敗,需要安裝軟件,且只能訪問局域網(wǎng)中的主機(jī)。 原生客戶端 + nginx數(shù)據(jù)轉(zhuǎn)發(fā)。失敗,需要安裝軟件,無法實(shí)現(xiàn)動態(tài)轉(zhuǎn)發(fā)(無法動態(tài)變更nginx配置文件)。 no-vnc + nginx數(shù)據(jù)轉(zhuǎn)發(fā)。失敗,無法實(shí)現(xiàn)動態(tài)轉(zhuǎn)發(fā)(無法動態(tài)變更nginx配置文件)。 no-vnc + node.js數(shù)據(jù)轉(zhuǎn)發(fā)。成功,完美實(shí)現(xiàn)。

實(shí)現(xiàn)

思想

整體思想如下圖所示:nginx轉(zhuǎn)發(fā)前臺的websocket連接,為了實(shí)現(xiàn)外網(wǎng)轉(zhuǎn)發(fā),添加開發(fā)的node.js服務(wù)器作為代理,將瀏覽器端no-vnc的websocket數(shù)據(jù)報(bào)在運(yùn)輸層轉(zhuǎn)發(fā)給目標(biāo)主機(jī)。

why nginx ?

如果思考過的話,其實(shí)發(fā)現(xiàn)不用nginx也能實(shí)現(xiàn)功能,這里使用nginx主要是減少了前臺對后臺架構(gòu)的耦合。

添加網(wǎng)關(guān)轉(zhuǎn)發(fā)所有請求,對前臺只暴露一個(gè)端口,不管后臺用什么技術(shù),用什么架構(gòu),用什么微服務(wù),在前臺看來,就好像在訪問單體應(yīng)用一樣。

就像目前的華軟項(xiàng)目一樣,后臺用了spring-boot、.net、node.js,各語言各框架發(fā)揮各自的優(yōu)勢,通過nginx的轉(zhuǎn)發(fā)將各模塊連接起來,無論后臺的架構(gòu)怎么變,對前臺毫無影響,這應(yīng)該是微服務(wù)架構(gòu)的最佳實(shí)踐。

這是spring官方推薦的微服務(wù)架構(gòu)圖,我們學(xué)習(xí)并實(shí)踐了api網(wǎng)關(guān),spring推薦netflix zuul,我們用的nginx,在請求轉(zhuǎn)發(fā)上,二者性能不相上下。

隨著業(yè)務(wù)需求的增長,我們肯定也會服務(wù)拆分,服務(wù)注冊,服務(wù)發(fā)現(xiàn),消息隊(duì)列,RPC調(diào)用。然后用上eureka、zookeeper、hystrix、feign等一個(gè)個(gè)優(yōu)秀的開源組件,一起探索spring-cloud的最佳實(shí)踐。

websocket

之前一直不了解websocket,就是知道個(gè)名,具體細(xì)節(jié)沒有學(xué)習(xí)。

http協(xié)議:請求響應(yīng),客戶端請求,服務(wù)器響應(yīng),一次請求就結(jié)束。服務(wù)端無法主動向客戶端推送數(shù)據(jù)。

為了解決這個(gè)問題,websocket應(yīng)運(yùn)而生。如果所示,不做贅述。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 临城县| 怀宁县| 石渠县| 常山县| 桐乡市| 叶城县| 宁德市| 思南县| 手游| 乡城县| 长春市| 乌恰县| 扎赉特旗| 金塔县| 达拉特旗| 平阳县| 深圳市| 盈江县| 门头沟区| 赤峰市| 山西省| 开封市| 东至县| 卫辉市| 峨山| 沙洋县| 邯郸县| 兴义市| 磐石市| 乐平市| 灌云县| 巩留县| 怀安县| 贡觉县| 泰宁县| 阿克陶县| 三台县| 承德市| 嘉禾县| 阳原县| 平陆县|