WebSocket雙向通信原理理解


WebSocket處於應用層,也是基於TCP(3次握手【最少3次能保證雙方都服務正常】)實現的。

TCP長連接流程:

  client向server發起連接,server接受client連接。雙方建立連接,Client與server完成一次讀寫之后,它們之間的連接並不會主動關閉,用心跳保活。

  后續的讀寫操作會繼續使用這個連接。

WebSocket就是基於TCP連接建立通訊的。
一旦WebSocket連接建立后,后續數據都以幀序列的形式傳輸。在客戶端或Server端中斷連接前,不需要客戶端和服務端重新發起連接請求。

發起握手:
每個WebSocket連接都始於一個HTTP請求。
具體來說,WebSocket協議在第一次握手連接時,通過HTTP協議在傳送數據,但是比普通HTTP請求相比多了一些字段。
 
客戶端:
GET /chat HTTP/1.1
        Upgrade: websocket    //轉換的是websocket協議
        Connection: Upgrade  //本次通信協議升級
        Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== //一個Base64 encode的值,這個是瀏覽器隨機生成的
     Sec-WebSocket-Protocol: chat, superchat//個用戶定義的字符串,用來區分同URL下,不同的服務所需要的協議

Sec-WebSocket-Version: 13 //websocket協議版本

服務器:

        HTTP/1.1 101 Switching Protocols //101 協議經過了轉換並握手成功建立起了通信。
     Upgrade: websocket Connection: Upgrade Sec
-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= Sec-WebSocket-Protocol: chat

websocket連接后,只要客戶端和服務器端任意一端不主動斷開連接前,通信行為都是在一個持久連接上發起,后續數據與請求都通過幀序列的形式進行傳輸。

建立連接后,websocket 有一個代理會和每個客戶端建立連接【所以服務端可以給客戶端推送消息】,直到客戶端需要資源時才調用他的處理資源的線程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM