国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

WebSocket在容器化管理平臺(tái)的應(yīng)用

superPershing / 1226人閱讀

摘要:介紹是一個(gè)持久化協(xié)議,相對(duì)于這種非持久協(xié)議而言。其在容器化管理平臺(tái)里主要有兩個(gè)應(yīng)用場(chǎng)景類(lèi)型,一個(gè)是實(shí)時(shí)消息類(lèi),將實(shí)時(shí)日志業(yè)務(wù)監(jiān)控等相關(guān)信息推送給客戶(hù)端。那么我們?cè)谔幚韺?shí)時(shí)消息時(shí)就采用了與相結(jié)合的方式,快速實(shí)現(xiàn)將應(yīng)用日志信息推送到端。

介紹

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

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

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

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

客戶(hù)端發(fā)起請(qǐng)求

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 #客戶(hù)端支持websocket協(xié)議,如果服務(wù)器也支持就使用WebSocket協(xié)議

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

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

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

斷開(kāi)連接

應(yīng)用場(chǎng)景

WebSocket屬于Web領(lǐng)域的實(shí)時(shí)推送技術(shù),目的讓用戶(hù)不刷新瀏覽器就可以實(shí)時(shí)更新。其在容器化管理平臺(tái)里主要有兩個(gè)應(yīng)用場(chǎng)景類(lèi)型,一個(gè)是實(shí)時(shí)消息類(lèi),將實(shí)時(shí)日志、業(yè)務(wù)監(jiān)控等相關(guān)信息推送給客戶(hù)端。如:在容器化管理平臺(tái)里部署了一個(gè)應(yīng)用,那么應(yīng)用部署的日志、運(yùn)行日志以及監(jiān)控信息如何及時(shí)推送到前端呢,另外一個(gè)就是交互消息類(lèi),在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ù)。那么我們?cè)谔幚韺?shí)時(shí)消息時(shí)就采用了WebSocket與ZMQ相結(jié)合的方式,快速實(shí)現(xiàn)將應(yīng)用日志信息推送到web端。其簡(jiǎn)化模型如下所示:

客戶(hù)端與服務(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)上。即客戶(hù)端(SUB)向服務(wù)器(PUB)訂閱消息,然后服務(wù)器將消息推送到所有訂閱了消息到客戶(hù)端,類(lèi)似于廣播。之所以采用ZMQ,而不是Socket的原因,前者支持N:M的連接,后者只能1:1的連接。其消息隊(duì)列模型示意圖:

具體的應(yīng)用場(chǎ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語(yǔ)言開(kāi)發(fā)的工具,可以將操作系統(tǒng)的命令字符終端共享成普通的網(wǎng)頁(yè)應(yīng)用展示出來(lái)。
在mac安裝根據(jù)情況選擇一種

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

使用:

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


那么在云幫,我們又是如何解決這個(gè)問(wèn)題的?
云幫web端操作容器就是基于gotty定制開(kāi)發(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開(kāi)發(fā)的。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/26889.html

相關(guān)文章

  • Docker相關(guān)項(xiàng)目

    摘要:相關(guān)基于項(xiàng)目和項(xiàng)目,并遵循應(yīng)用的十二因素風(fēng)格。相關(guān)在設(shè)計(jì)上,項(xiàng)目盡量保持驅(qū)動(dòng)和模塊化,以便模塊支持不同的實(shí)現(xiàn)方案。相關(guān)不僅可以管理眾多虛擬機(jī),其計(jì)算服務(wù)還支持對(duì)的驅(qū)動(dòng),管理引擎的子項(xiàng)目還可用于通過(guò)模板管理容器?,F(xiàn)已整合公司所支持的項(xiàng)目。 整理自《Docker技術(shù)入門(mén)與實(shí)踐》 PaaS(Platform as a Service) PaaS 是希望提供一個(gè)統(tǒng)一的可供所有軟件直接運(yùn)行而無(wú)需...

    littlelightss 評(píng)論0 收藏0
  • 云幫社區(qū)版5月升級(jí),全面支持后端服務(wù)高可用,修復(fù)了若干Bug

    摘要:全面支持后端服務(wù)的高可用調(diào)整優(yōu)化后端服務(wù)組件個(gè)中等級(jí)別以上的修復(fù)云幫社區(qū)版迎來(lái)了年月升級(jí)版本,我們優(yōu)化了云幫的安裝部署流程,全面支持后端服務(wù)的高可用,改進(jìn)了相關(guān)提示信息文案,完善了平臺(tái)日志模塊,升級(jí)了部分核心組件版本。 全面支持后端服務(wù)的高可用、調(diào)整優(yōu)化后端服務(wù)組件、4個(gè)中等級(jí)別以上的bug修復(fù)、云幫社區(qū)版迎來(lái)了2017年5月升級(jí)版本,我們優(yōu)化了云幫的安裝部署流程,全面支持后端服務(wù)的高...

    jay_tian 評(píng)論0 收藏0
  • 網(wǎng)易容器平臺(tái)微服務(wù)實(shí)踐(一)

    摘要:本文是網(wǎng)易容器云平臺(tái)的微服務(wù)化實(shí)踐系列文章的第一篇。網(wǎng)易容器云平臺(tái)的前身是網(wǎng)易應(yīng)用自動(dòng)部署平臺(tái),它能夠利用云提供的基礎(chǔ)設(shè)施,實(shí)現(xiàn)包括構(gòu)建和部署一體化在內(nèi)的整個(gè)應(yīng)用生命周期管理。目前網(wǎng)易云容器服務(wù)團(tuán)隊(duì)以的方式管理著微服務(wù),每周構(gòu)建部署次數(shù)。 此文已由作者馮常健授權(quán)網(wǎng)易云社區(qū)發(fā)布。 歡迎訪問(wèn)網(wǎng)易云社區(qū),了解更多網(wǎng)易技術(shù)產(chǎn)品運(yùn)營(yíng)經(jīng)驗(yàn)。 摘要:網(wǎng)易云容器平臺(tái)期望能給實(shí)施了微服務(wù)架構(gòu)的團(tuán)隊(duì)提供完...

    zhjx922 評(píng)論0 收藏0
  • swoolefy-基于swoole擴(kuò)展實(shí)現(xiàn)高性能常駐內(nèi)存型API和Web應(yīng)用服務(wù)框架

    摘要:是一個(gè)基于擴(kuò)展實(shí)現(xiàn)的輕量級(jí)高性能的常駐內(nèi)存型的和應(yīng)用服務(wù)框架高度封裝了,,服務(wù)器,以及基于實(shí)現(xiàn)可擴(kuò)展的服務(wù),同時(shí)支持包方式安裝部署項(xiàng)目?;趯?shí)用,抽象事件處理類(lèi),實(shí)現(xiàn)與底層的回調(diào)的解耦,支持同步異步調(diào)用,內(nèi)置等常用組件等。 swoolefy swoolefy是一個(gè)基于swoole擴(kuò)展實(shí)現(xiàn)的輕量級(jí)高性能的常駐內(nèi)存型的API和Web應(yīng)用服務(wù)框架,高度封裝了http,websocket,ud...

    lewinlee 評(píng)論0 收藏0
  • 基于 Swoole 構(gòu)建 CTF AWD 比賽環(huán)境搭建與實(shí)踐

    摘要:出題思路本次題目來(lái)自于我的一個(gè)外包項(xiàng)目實(shí)踐。回合制比賽以分鐘為一回合。選手在比賽過(guò)程中需要盜取到對(duì)手的密鑰,以竊聽(tīng)他方內(nèi)容,并修改己方密鑰以放泄露動(dòng)態(tài)該部分同樣由中心服務(wù)器與完成。 Author: RytiaDate: 20190427Blog: www.zzfly.net本人才學(xué)疏淺,望君不吝賜教 背景 受學(xué)校老師邀請(qǐng),為學(xué)弟學(xué)妹舉辦分享會(huì)介紹 AWD 相關(guān)經(jīng)驗(yàn),本人一時(shí)頭腦風(fēng)暴采用...

    GitCafe 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<