成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

云計算
Websocket是一個持久化協議,相對于HTTP這種非持久協議而言。它實現了瀏覽器與服務器全雙工通信,能更好的節省服務器資源和帶寬并達到實時通訊的目的,與HTTP一樣基于已建立的TCP連接來傳輸數據。

介紹

Websocket是一個持久化協議,相對于HTTP這種非持久協議而言。它實現了瀏覽器與服務器全雙工通信,能更好的節省服務器資源和帶寬并達到實時通訊的目的,與HTTP一樣基于已建立的TCP連接來傳輸數據。但是與HTTP協議不同的地方就是:WebSocket是一種雙向通信協議,在建立連接后,WebSocket服務器端和客戶端都能主動向對方發送或接收數據,就像Socket一樣;WebSocket需要像TCP一樣,先建立連接,連接成功后才能相互通信。

[[191202]]

運行機制

傳統的HTTP客戶端與服務器請求響應模式,一個生命周期里只有一個或多個請求和一個或多個與之對應的響應。 如下所示:

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

1.客戶端發起請求

  1. Request Method:GET 
  2. Status Code:101 Switching Protocols #101之后的數據傳輸采用Websocket協議 
  3. Connection:Upgrade 
  4. Sec-WebSocket-Extensions:permessage-deflate; 
  5. Sec-WebSocket-Key:dfQAy9mlQ0EjD5MmvvsZaQ== #驗證 
  6. Sec-WebSocket-Version:13 
  7. Upgrade:websocket #客戶端支持websocket協議,如果服務器也支持就使用WebSocket協議 

2.服務器解析,并返回握手信息,建立連接

  1. Connection:upgrade 
  2. sec-websocket-accept:+mKC4huknIfMGJFOzclP9fO058g= #驗證 
  3. upgrade:websocket 

3.傳輸數據(雙向)

4.斷開連接

應用場景

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

實例1:實時消息

就拿云幫而言,需要實時推送的是每個應用的日志信息和業務監控數據。那么我們在處理實時消息時就采用了WebSocket與ZMQ相結合的方式,快速實現將應用日志信息推送到web端。其簡化模型如下所示:

客戶端與服務器采用WebSocket協議,實時傳輸相關數據。相關數據方面采用的是ZMQ。云幫主要使用了ZeroMQ消息隊列中的Publisher-Subscriber模型,將所有相關信息匯總到一個節點上在推送到其他節點上。即客戶端(SUB)向服務器(PUB)訂閱消息,然后服務器將消息推送到所有訂閱了消息到客戶端,類似于廣播。之所以采用ZMQ,而不是Socket的原因,前者支持N:M的連接,后者只能1:1的連接。其消息隊列模型示意圖:

具體的應用場景相關設定參數:

  1. #docker-compose.yml 
  2. mpush: 
  3.   container_name: mpush 
  4.   environment: 
  5.   - ZMQ_SUB_FROM=tcp://ip:9242 
  6.   image: hub.goodrain.com/dc-deploy/mpush 
  7.   log_driver: json-file 
  8.   log_opt: 
  9.     max-size: 50m 
  10.   ports: 
  11.   - 0.0.0.0:6060:6060 
  12.   restart: always 
  13.  
  14. #config.py 定義實時消息URL 
  15. WEBSOCKET_URL = { 
  16.     'cloudbang''ws://ip:6060/websocket'
  17. #dalaran_docker 
  18. ZMQ_BIND_SUB=tcp://0.0.0.0:9241 
  19. ZMQ_BIND_PUB=tcp://0.0.0.0:9242 
  20. ZMQ_BIND_PUB2=tcp://0.0.0.0:9243 
  21. #setting 
  22. 'docker_sub': { 
  23.         'address': [ 
  24.             'tcp://ip:9242' 
  25.         ], 
  26.         'storage''/data/docker_logs' 
  27.     }, 

實例2:交互消息

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

  1. #brew 
  2. brew tap yudai/gotty 
  3. brew install gotty 
  4. #go 
  5. go get github.com/yudai/gotty 

使用:

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

那么在云幫,我們又是如何解決這個問題的? 云幫web端操作容器就是基于gotty定制開發的WebSocket共享字符終端。 創建一個websocket實例,連接服務器進行前后臺交互及相關事件處理

  1. #前端實現部分代碼 
  2. var openWs = function() { 
  3.         if(is_community == "True"){ 
  4.             host_name = window.location.hostname+":8188"
  5.         } 
  6.         var url = tmp_url.replace("{{DOCKER_WSS_URL}}",host_name) 
  7.         console.log(url) 
  8.         var ws = new WebSocket(url); 
  9.         var term; 
  10.         var pingTimer; 
  11.         ws.onopen = function(event) { 
  12.             ws.send(JSON.stringify({ T_id: t_id, S_id: s_id, C_id: c_id, Md5: md5,})); 
  13.             pingTimer = setInterval(sendPing, 30 * 1000, ws); 
  14.             hterm.defaultStorage = new lib.Storage.Local(); 
  15.             hterm.defaultStorage.clear(); 
  16.             term = new hterm.Terminal(); 
  17.             term.getPrefs().set("send-encoding""raw"); 
  18.             term.onTerminalReady = function() { 
  19.                 var io = term.io.push(); 
  20.                 io.onVTKeystroke = function(str) { 
  21.                     ws.send("0" + str); 
  22.                 }; 
  23.                 io.sendString = io.onVTKeystroke; 
  24.                 io.onTerminalResize = function(columns, rows) { 
  25.                     ws.send( 
  26.                         "2" + JSON.stringify( 
  27.                             { 
  28.                                 columns: columns, 
  29.                                 rowsrows
  30.                             } 
  31.                         ) 
  32.                     ) 
  33.                 }; 
  34.                 term.installKeyboard(); 
  35.             }; 
  36.             term.decorate(document.getElementById("terminal")); 
  37.         }; 

后端程序基于Gotty開發的。

責任編輯:武曉燕 來源: oschina博客
相關推薦

2023-08-23 15:18:06

云計算容器

2024-01-02 11:15:46

Linux系統

2023-12-07 19:19:11

2023-11-28 13:50:00

Kubernetes容器

2024-05-13 08:06:22

Spring消息隊列物聯網

2020-09-14 10:13:37

開發者

2016-09-04 16:20:09

2018-07-16 22:13:54

CPU容器

2014-05-14 16:37:20

CIO移動應用平臺

2018-07-16 22:40:21

CPU容器

2022-07-11 15:35:42

云計算銀行本文主要從銀行實際應

2011-12-02 17:42:43

德訊科技運營管理

2018-11-06 12:08:09

容器負載均衡云計算

2024-03-19 08:45:45

WebSocketSpring應用開發

2017-06-14 09:00:40

容器開發人員云應用

2023-10-11 09:58:07

2014-12-05 11:23:28

docker騰訊云

2020-06-10 08:55:36

Docker容器工具

2022-09-13 09:09:37

容器容器云容器化

2019-02-20 17:49:32

大數據應急管理數據分析
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久精品一区二区三区四区 | 日本高清视频在线播放 | 中文字幕精品一区二区三区在线 | 亚洲欧美在线观看 | 在线国产一区二区三区 | 美女午夜影院 | 亚洲欧美综合 | 99精品国产一区二区三区 | 国产高清精品一区二区三区 | 草草草久久久 | 国产精品福利在线观看 | 国产美女一区二区 | 精品久久香蕉国产线看观看亚洲 | 一区二区三区四区免费视频 | 国产精品久久九九 | 免费国产一区二区 | 成人一区二区三区在线观看 | 欧美成人性生活 | 欧美久久视频 | 国产97色| 黄色国产大片 | 亚洲天天干 | 国产乱码精品一区二区三区中文 | 亚洲男人天堂2024 | 国产一区91精品张津瑜 | 国产精品嫩草影院精东 | av一级| 九九99九九精彩46 | 久草电影网 | 亚洲一区二区免费 | 国产欧美在线观看 | 国产精品国产a级 | 黄色一级大片视频 | 亚洲综合色站 | 午夜精品一区二区三区在线观看 | 午夜爱爱毛片xxxx视频免费看 | 久久亚洲美女 | 欧美日在线| 国产精品综合 | 成人精品一区二区 | 久久国产精品免费 |