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

資訊專欄INFORMATION COLUMN

淺析websocket

oujie / 3117人閱讀

摘要:握手結束后,雙方就可以進行雙向通訊了,所有的通訊內容都以數據幀格式來傳輸。數據幀比特表示一個中的最后一個。每個比特必須為,后續擴展使用。比特表示負載數據是否。或者字節如果標志為時存在,保存。

Websocket 背景

歷史上,如果一個web應用程序需要和server進行雙向通信(例如,實時聊天和游戲),
需要大量的http請求來檢查server的內容是否有更新, 同時也需要很多http請求來發送
通知,這種方式有許多問題:

server端必須使用大量的tcp連接來服務每一個client:一類連接用來發送信息給
client, 另一類連接用來接收新的消息。

有大量不必要網絡開銷,因為每一次消息通訊都都包含http header。

client需要維護一個map來映射發送數據的連接和接受數據的連接。

一個簡單的解決方案就是使用一個tcp連接來進行雙向通訊,這就是websocket的作用。

websocket使用80和443端口,對HTTP代理和網關友好。

連接握手過程

client發送

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13

server響應

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: chat

連接握手的目的是兼容基于HTTP的server和代理,所以一個端口可以同時服務HTTP請求和
websocket請求。

請求中Upgrage: websocket表示這是一個websocket請求。服務端收到該請求后會根據
請求中攜帶的Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==通過特定算法生成
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=響應給客戶端,客戶端校驗
通過握手成功。

握手結束后,雙方就可以進行雙向通訊了,所有的通訊內容都以數據幀格式來傳輸。

數據幀

FIN: 1比特

表示一個message中的最后一個frame。

RSV1, RSV2, RSV3: 每個1比特

必須為0,后續擴展使用。

Optcode: 4比特

定義負載數據的解析方式。

%x0 表示一個連續幀。

%x1 表示一個文本幀。

0x2 表示一個二進制幀。

0x3-7 保留,以后給非控制幀使用。

0x8 表示連接關閉。

0x9 表示ping。

0xA 表示pong。

0xB-F 保留,以后給控制幀使用。

Mask: 1比特

表示負載數據是否masked。如果為1,masking-key包含一個key,用來unmask負載
數據。所有從客戶端方向發送的數據,該位必須置1。

*Playload length: * 7比特,7+16比特, 或者7+64比特

0-125表示負載數據的長度。

126,接下來的兩個字節為16位無符號整型表示負載數據長度。

127, 接下來的8個字節為64為無符號整型表示負載數據長度。

Masking key: 0或者4字節

如果mask標志為1時存在,保存mask key。

Payload data: 負載數據。

關閉握手過程

關閉握手比連接握手簡單的多,連接的任何一端都可以發送一個close frame,
開始關閉握手,收到這個control frame的端發送一個close frame響應,
另一端收到這個close frame后關閉連接。

一端發送close frame后就表示這個連接將會被關閉并且不會再發送任何數據到另一端, 對端
收到close frame后知道這個連接將會被關閉,后續收到的數據都會被丟棄。

websocket關閉握手的目的是完善TCP的關閉握手,因為在端到端的情景TCP的關閉握手并不
總是可信賴的,尤其端到端中間有代理或者防火墻的情況下。

通過發送一個close frame然后等待響應,這種方式避免了不必要的數據丟失。

websocket & nginx

nginx并沒有支持websocket,只是支持websocket的代理。

http {
    map $http_upgrade $connection_upgrade {
        default upgrade;
        "" close;
    }

    upstream websocket {
        server 192.168.100.10:8010;
    }

    server {
        listen 8020;
        location / {
            proxy_pass http://websocket;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
        }
    }
}

nginx也有第三方支持websocket的模塊nchan,但
不是為流媒體設計的。

哪些服務端支持websocket

Node.js

Socket.IO

WebSocket-Node

ws

Java

Jetty

Rubby

EventMachine

Python

pywebsocket

Tornado

Erlang

Shirasu

.NET

SuperWebSocket

參考資料

http://blog.teamtreehouse.com/an-introduction-to-websockets

http://www.websocket.org/aboutwebsocket.html

https://www.html5rocks.com/en/tutorials/websockets/basics

https://os.alfajango.com/websockets-slides/#/2

The WebSocket Protocol

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/38246.html

相關文章

  • 淺析websocket

    摘要:握手結束后,雙方就可以進行雙向通訊了,所有的通訊內容都以數據幀格式來傳輸。數據幀比特表示一個中的最后一個。每個比特必須為,后續擴展使用。比特表示負載數據是否。或者字節如果標志為時存在,保存。 Websocket 背景 歷史上,如果一個web應用程序需要和server進行雙向通信(例如,實時聊天和游戲),需要大量的http請求來檢查server的內容是否有更新, 同時也需要很多http請...

    fou7 評論0 收藏0
  • React Native Debug原理淺析

    摘要:過程涉及到三個對象,一個是或,一個是,另外一個就是瀏覽器或或其他。在中進行配置了,也就是會執行腳本。然后會給這個注冊一些監聽在收到消息時會回調。發出一個消息讓瀏覽器準備的運行環境在收到消息會調用。 第一次在segmentfault寫博客,很緊張~~~公司項目上ReactNative,之前也是沒有接觸過,所以也是一邊學習一邊做項目了,最近騰出手來更新總結了一下RN的Debug的一個小知識...

    senntyou 評論0 收藏0
  • React Native Debug原理淺析

    摘要:過程涉及到三個對象,一個是或,一個是,另外一個就是瀏覽器或或其他。在中進行配置了,也就是會執行腳本。然后會給這個注冊一些監聽在收到消息時會回調。發出一個消息讓瀏覽器準備的運行環境在收到消息會調用。 第一次在segmentfault寫博客,很緊張~~~公司項目上ReactNative,之前也是沒有接觸過,所以也是一邊學習一邊做項目了,最近騰出手來更新總結了一下RN的Debug的一個小知識...

    avwu 評論0 收藏0
  • WebSocket系列之基礎知識入門篇

    摘要:概述本文是系列的第一篇,主要介紹相關的基礎協議知識和。客戶端收到響應后,立即發起下一次的請求。收到消息通過事件來接收消息。類型則需要傳遞一個對象作為參數,相關的內容也將在本系列第二篇中進行介紹。 概述 本文是WebSocket系列的第一篇,主要介紹WebSocket相關的基礎協議知識和API。由于WebSocket的相關介紹在MDN中分布較亂,初學者不太容易入門,因此通過本文將相關基礎...

    Yuqi 評論0 收藏0
  • 原理解釋 - 收藏集 - 掘金

    摘要:巧前端基礎進階全方位解讀前端掘金我們在學習的過程中,由于對一些概念理解得不是很清楚,但是又想要通過一些方式把它記下來,于是就很容易草率的給這些概念定下一些方便自己記憶的有偏差的結論。 計算機程序的思維邏輯 (83) - 并發總結 - 掘金從65節到82節,我們用了18篇文章討論并發,本節進行簡要總結。 多線程開發有兩個核心問題,一個是競爭,另一個是協作。競爭會出現線程安全問題,所以,本...

    AlphaGooo 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<