介紹
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例項,連線伺服器進行前後臺互動及相關事件處理
後端程式基於gotty開發的。#前端實現部分**
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"));
};
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的雙工通訊程式。第二篇文章則是直接使用文本來通訊...