WebSocket在容器化管理平台的應用

2021-07-31 04:00:42 字數 3052 閱讀 6506

介紹

websocket是乙個持久化協議,相對於http這種非持久協議而言。它實現了瀏覽器與伺服器全雙工通訊,能更好的節省伺服器資源和頻寬並達到實時通訊的目的,與http一樣基於已建立的tcp連線來傳輸資料。但是與http協議不同的地方就是:websocket是一種雙向通訊協議,在建立連線後,websocket伺服器端和客戶端都能主動向對方傳送或接收資料,就像socket一樣;websocket需要像tcp一樣,先建立連線,連線成功後才能相互通訊。

執行機制

傳統的http客戶端與伺服器請求響應模式,乙個生命週期裡只有乙個或多個請求和乙個或多個與之對應的響應。 如下所示:

而websocket模式下客戶端與伺服器響應模式,一旦websocket連線建立,在客戶端或者服務端中斷連線前,資料都以幀序列傳輸,不需要重啟客戶端或者服務端重新發起連線請求。

客戶端發起請求

request method:get

status code:101 switching protocols #101之後的資料傳輸採用websocket協議

connection:upgrade

sec-websocket-extensions:permessage-deflate;

sec-websocket-key:dfqay9mlq0ejd5mmvvszaq== #驗證

sec-websocket-version:

13upgrade:websocket #客戶端支援websocket協議,如果伺服器也支援就使用websocket協議

伺服器解析,並返回握手資訊,建立連線
connection:upgrade

sec-websocket-accept:+mkc4huknifmgjfozclp9fo058g= #驗證

upgrade:websocket

傳輸資料(雙向)

斷開連線

應用場景

websocket屬於web領域的實時推送技術,目的讓使用者不重新整理瀏覽器就可以實時更新。其在容器化管理平台裡主要有兩個應用場景型別,乙個是實時訊息類,將實時日誌、業務監控等相關資訊推送給客戶端。如:在容器化管理平台裡部署了乙個應用,那麼應用部署的日誌、執行日誌以及監控資訊如何及時推送到前端呢,另外乙個就是互動訊息類,在web介面操作容器,節省手動登入伺服器進入容器內的時間,提高效率。

例項1:實時訊息

就拿雲幫而言,需要實時推送的是每個應用的日誌資訊和業務監控資料。那麼我們在處理實時訊息時就採用了websocket與zmq相結合的方式,快速實現將應用日誌資訊推送到web端。其簡化模型如下所示:

#config.py 定義實時訊息url

websocket_url =

#dalaran_docker

zmq_bind_sub=tcp:

.0.0:9241

zmq_bind_pub=tcp:

.0.0:9242

zmq_bind_pub2=tcp:

.0.0:9243

#setting

'docker_sub': ,

例項2:互動訊息

gotty是乙個用go語言開發的工具,可以將作業系統的命令字元終端共享成普通的網頁應用展示出來。 在mac安裝根據情況選擇一種

使用:

gotty -a 0.0.0.0 -p '8080' -w tmux

那麼在雲幫,我們又是如何解決這個問題的? 雲幫web端操作容器就是基於gotty定製開發的websocket共享字元終端。 建立乙個websocket例項,連線伺服器進行前後臺互動及相關事件處理

#前端實現部分**

var openws = function

() var url = tmp_url.replace("}",host_name)

console.log(url)

var ws = new websocket(url);

var term;

var pingtimer;

ws.onopen = function

(event)

)); 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();

io.sendstring = io.onvtkeystroke;

io.onterminalresize = function

(columns, rows)))

};term.installkeyboard();

};term.decorate(document.getelementbyid("terminal"));

};

後端程式基於gotty開發的。

WebSocket在容器化管理平台的應用

介紹 websocket是乙個持久化協議,相對於http這種非持久協議而言。它實現了瀏覽器與伺服器全雙工通訊,能更好的節省伺服器資源和頻寬並達到實時通訊的目的,與http一樣基於已建立的tcp連線來傳輸資料。但是與http協議不同的地方就是 websocket是一種雙向通訊協議,在建立連線後,web...

在python中使用websocket

介紹一款很帥的外掛程式autobahnpython,通過它可以在python中很方便的使用websocket進行通訊 基於twisted框架 這個外掛程式真正強大的地方是它提供了乙個 發布 訂閱模式,具體內容有空再寫,先簡單介紹一下如何建立傳統的連線。建立伺服器 必須的模組 from twisted...

在WCF中使用websocket

今天在網上閒逛的時候,發現wcf4.5中新增了乙個nethttpbinding協議,它是支援websocket的。在網上找了一下教程,附上codeproject上的兩篇文章 其中第一篇文章是使用soap協議來封裝訊息的,實現了乙個基於websocket的雙工通訊程式。第二篇文章則是直接使用文本來通訊...