久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何進(jìn)行WebSocket在容器化管理平臺(tái)的應(yīng)用

144次閱讀
沒有評論

共計(jì) 3087 個(gè)字符,預(yù)計(jì)需要花費(fèi) 8 分鐘才能閱讀完成。

這篇文章給大家介紹如何進(jìn)行 WebSocket 在容器化管理平臺(tái)的應(yīng)用,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

介紹

Websocket 是一個(gè)持久化協(xié)議,相對于 HTTP 這種非持久協(xié)議而言。它實(shí)現(xiàn)了瀏覽器與服務(wù)器全雙工通信,能更好的節(jié)省服務(wù)器資源和帶寬并達(dá)到實(shí)時(shí)通訊的目的, 與 HTTP 一樣基于已建立的 TCP 連接來傳輸數(shù)據(jù)。但是與 HTTP 協(xié)議不同的地方就是:WebSocket 是一種雙向通信協(xié)議,在建立連接后,WebSocket 服務(wù)器端和客戶端都能主動(dòng)向?qū)Ψ桨l(fā)送或接收數(shù)據(jù),就像 Socket 一樣;WebSocket 需要像 TCP 一樣,先建立連接,連接成功后才能相互通信。

運(yùn)行機(jī)制

傳統(tǒng)的 HTTP 客戶端與服務(wù)器請求響應(yīng)模式,一個(gè)生命周期里只有一個(gè)或多個(gè)請求和一個(gè)或多個(gè)與之對應(yīng)的響應(yīng)。如下所示:

而 WebSocket 模式下客戶端與服務(wù)器響應(yīng)模式, 一旦 WebSocket 連接建立,在客戶端或者服務(wù)端中斷連接前,數(shù)據(jù)都以幀序列傳輸,不需要重啟客戶端或者服務(wù)端重新發(fā)起連接請求。

客戶端發(fā)起請求

Request Method:GET
Status Code:101 Switching Protocols #101 之后的數(shù)據(jù)傳輸采用 Websocket 協(xié)議
Connection:Upgrade
Sec-WebSocket-Extensions:permessage-deflate;
Sec-WebSocket-Key:dfQAy9mlQ0EjD5MmvvsZaQ== # 驗(yàn)證
Sec-WebSocket-Version:13
Upgrade:websocket # 客戶端支持 websocket 協(xié)議,如果服務(wù)器也支持就使用 WebSocket 協(xié)議

服務(wù)器解析,并返回握手信息,建立連接

Connection:upgrade
sec-websocket-accept:+mKC4huknIfMGJFOzclP9fO058g= # 驗(yàn)證
upgrade:websocket

傳輸數(shù)據(jù)(雙向)

斷開連接

應(yīng)用場景

WebSocket 屬于 Web 領(lǐng)域的實(shí)時(shí)推送技術(shù),目的讓用戶不刷新瀏覽器就可以實(shí)時(shí)更新。其在容器化管理平臺(tái)里主要有兩個(gè)應(yīng)用場景類型,一個(gè)是實(shí)時(shí)消息類,將實(shí)時(shí)日志、業(yè)務(wù)監(jiān)控等相關(guān)信息推送給客戶端。如:在容器化管理平臺(tái)里部署了一個(gè)應(yīng)用,那么應(yīng)用部署的日志、運(yùn)行日志以及監(jiān)控信息如何及時(shí)推送到前端呢,另外一個(gè)就是交互消息類,在 Web 界面操作容器,節(jié)省手動(dòng)登錄服務(wù)器進(jìn)入容器內(nèi)的時(shí)間,提高效率。

實(shí)例 1: 實(shí)時(shí)消息

就拿云幫而言,需要實(shí)時(shí)推送的是每個(gè)應(yīng)用的日志信息和業(yè)務(wù)監(jiān)控?cái)?shù)據(jù)。那么我們在處理實(shí)時(shí)消息時(shí)就采用了 WebSocket 與 ZMQ 相結(jié)合的方式,快速實(shí)現(xiàn)將應(yīng)用日志信息推送到 web 端。其簡化模型如下所示:客戶端與服務(wù)器采用 WebSocket 協(xié)議,實(shí)時(shí)傳輸相關(guān)數(shù)據(jù)。相關(guān)數(shù)據(jù)方面采用的是 ZMQ。云幫主要使用了 ZeroMQ 消息隊(duì)列中的 Publisher-Subscriber 模型, 將所有相關(guān)信息匯總到一個(gè)節(jié)點(diǎn)上在推送到其他節(jié)點(diǎn)上。即客戶端 (SUB) 向服務(wù)器 (PUB) 訂閱消息,然后服務(wù)器將消息推送到所有訂閱了消息到客戶端,類似于廣播。之所以采用 ZMQ,而不是 Socket 的原因,前者支持 N:M 的連接, 后者只能 1:1 的連接。

具體的應(yīng)用場景相關(guān)設(shè)定參數(shù):

#docker-compose.yml
mpush:
 container_name: mpush
 environment:
 - ZMQ_SUB_FROM=tcp://ip:9242
 image: hub.goodrain.com/dc-deploy/mpush
 log_driver: json-file
 log_opt:
 max-size: 50m
 ports:
 - 0.0.0.0:6060:6060
 restart: always
#config.py  定義實(shí)時(shí)消息 URL
WEBSOCKET_URL = {
  cloudbang :  ws://ip:6060/websocket ,
#dalaran_docker
ZMQ_BIND_SUB=tcp://0.0.0.0:9241
ZMQ_BIND_PUB=tcp://0.0.0.0:9242
ZMQ_BIND_PUB2=tcp://0.0.0.0:9243
#setting
 docker_sub : {
  address : [
  tcp://ip:9242 
 ],
  storage :  /data/docker_logs 
 },

實(shí)例 2: 交互消息

GoTTY 是一個(gè)用 Go 語言開發(fā)的工具, 可以將操作系統(tǒng)的命令字符終端共享成普通的網(wǎng)頁應(yīng)用展示出來。在 mac 安裝根據(jù)情況選擇一種

#brew
brew tap yudai/gotty
brew install gotty
go get github.com/yudai/gotty

使用:

gotty -a 0.0.0.0 -p  8080  -w tmux

那么在云幫,我們又是如何解決這個(gè)問題的?云幫 web 端操作容器就是基于 gotty 定制開發(fā)的 WebSocket 共享字符終端。創(chuàng)建一個(gè) websocket 實(shí)例, 連接服務(wù)器進(jìn)行前后臺(tái)交互及相關(guān)事件處理

# 前端實(shí)現(xiàn)部分代碼
var openWs = function() { if(is_community ==  True){
 host_name = window.location.hostname+ :8188 
 }
 var url = tmp_url.replace({{DOCKER_WSS_URL}} ,host_name)
 console.log(url)
 var ws = new WebSocket(url);
 var term;
 var pingTimer;
 ws.onopen = function(event) { ws.send(JSON.stringify({ T_id: t_id, S_id: s_id, C_id: c_id, Md5: md5,}));
 pingTimer = setInterval(sendPing, 30 * 1000, ws);
 hterm.defaultStorage = new lib.Storage.Local();
 hterm.defaultStorage.clear();
 term = new hterm.Terminal();
 term.getPrefs().set( send-encoding ,  raw 
 term.onTerminalReady = function() { var io = term.io.push();
 io.onVTKeystroke = function(str) { ws.send( 0  + str);
 };
 io.sendString = io.onVTKeystroke;
 io.onTerminalResize = function(columns, rows) {
 ws.send(
  2  + JSON.stringify(
 {
 columns: columns,
 rows: rows,
 }
 )
 )
 };
 term.installKeyboard();
 };
 term.decorate(document.getElementById( terminal));
 };

后端程序基于 Gotty 開發(fā)的。

關(guān)于如何進(jìn)行 WebSocket 在容器化管理平臺(tái)的應(yīng)用就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-16發(fā)表,共計(jì)3087字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 汶川县| 常山县| 河北省| 那曲县| 当雄县| 米林县| 盖州市| 石楼县| 延吉市| 古田县| 云和县| 宁津县| 伊川县| 密云县| 会泽县| 襄樊市| 大安市| 三门峡市| 诏安县| 河北省| 夏邑县| 宜兰县| 远安县| 广安市| 安国市| 衢州市| 龙门县| 邮箱| 祁门县| 泰安市| 县级市| 白河县| 松桃| 吐鲁番市| 酒泉市| 四川省| 湘潭市| 绥棱县| 陵水| 玉树县| 尉氏县|