當前位置:編程學習大全網 - 編程語言 - WebSocket 的實現

WebSocket 的實現

長連接: 壹個鏈接上可以連續發送多個數據包,在鏈接期間,如果沒有數據包發送,需要雙方發鏈路檢查包

TCP/IP: TCP/IP 屬於傳輸層,主要解決網絡中的數據傳輸問題,只管傳輸數據。但這樣對傳輸的數據沒有壹個規範的封裝、解析等處理。使得傳輸的數據難以識別,所以才有了應用層協議對數據進行的封裝、解析等,如http協議。

HTTP: HTTP協議是應用層協議,用於分裝解析傳輸數據。 從HTTP1.1開始其實就默認開啟了長鏈接,也就是請求頭header中可以看到Connection:Keep-alive。但是長連接只是說保持了(服務器可以告訴客戶端保持時間Keep-Alive:timeout=20;max=20;)這個TCP通道,並采用服務器和客戶端應答模式(Request-Response),不需要再創建壹個鏈接通道,做到壹個性能優化。

socket: 與HTTP協議不壹樣,socket不是協議,他是在程序層面上對傳輸層協議(像TCP/IP)的接口封裝。我們知道傳輸層的協議,是解決數據在網絡中傳輸的問題的,那麽socket(套接字)就是傳輸通道兩端的接口。

Websocket: WebSocket是包裝成了壹個應用層協議作為socket,從而能夠讓客戶端和遠程服務端通過web建立全雙工通信。

WebSocket API 是HTML5 推出的東西。在客戶端我們可以通過HTML5 所提供的API 對websocket 進行創建、發送數據、監聽信息、監聽報錯等功能( HTML5 WebSocket )

我們知道WebSocket 是在Socket的基礎上實現的,所以我們要做的是對現有的Socket協議進行升級。

步驟: 客戶端發送websocket請求-->服務端接受並識別該請求-->對該請求協議進行升級--> 返回給客戶端 --> websocket 通道建立 --> 客戶端/服務端發送數據

協議升級

在這裏需要註意的是頭部信息和頭部信息中的Sec-Websocket-Accept的值。

該值需要是壹個通過base64加密的哈希值(sha1)。 而該加密所用的數據是客戶端傳過來的sec-websocket-key的值和MAGIC_STRINC內的固定值。 對MAGIC_STRINC的說明

Webscoket 中傳輸的數據是 數據幀(frame)

數據幀有多種類型 主要有:文本型、二進制數據

數據幀結構

每壹列代表壹個字節,壹個字節8位,每壹位又代表壹個二進制數。

創建數據幀

解數據幀

心跳檢查

由於websocket 不進行交互會關閉通道所以,才有了心跳檢查。

websocket與和他http的區別

基於node實現websocket協議

使用nodeJS在HTTP上實現WebSocket

如何讓我的服務器返回正確的Sec-WebSocket-Accept標頭值

學習WebSocket協議—從頂層到底層的實現原理

websocket 協議幀 解析

nodejs實現Websocket的數據接收發送

  • 上一篇:linuxshell編程書籍推薦
  • 下一篇:PDA到底有什麽用,它有什麽功能,舉例說明
  • copyright 2024編程學習大全網