WebSocket是web瀏覽器和服務器之間的一種全雙工通訊協議,其中WebSocket協議由IETF定位標準,WebSocket API由W3C定位標準。一旦Web客戶端與服務器創建起鏈接,以後的所有數據通訊都經過這個鏈接進行。通訊過程當中,支持發送JSON、XML、HTML或圖片等任意格式的數據。html
相同點主要有:python
不一樣之處在於:web
websocket是基於TCP的一個應用協議,與HTTP協議的關聯之處在於websocket的握手數據被HTTP服務器看成HTTP包來處理,主要經過update request HTTP包創建起鏈接,以後的通訊所有使用websocket本身的協議。瀏覽器
請求:TCP鏈接創建後,客戶端發送websocket的握手請求,請求報文頭部以下:安全
GET /chat HTTP/1.1 Host: server.example.com **Upgrade: websocket** Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Origin: https://example.com Sec-WebSocket-Protocol: chat, superchat Sec-WebSocket-Version: 13
響應:服務器接收到請求後,返回狀態碼101 Switching Protocols的響應。服務器
HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= Sec-WebSocket-Protocol: chat
握手成功後,通訊再也不使用HTTP協議,而採用WebSocket獨立的數據幀。websocket
狀態碼 | 名稱 | 描述 |
---|---|---|
0-999 | 保留段,未使用 | |
1000 | CLOSE_NORMAL | 正常關閉 |
1001 | CLOSE_GOING_AWAY | 終端離開,可能由於服務端錯誤,也可能由於瀏覽器正從打卡鏈接的頁面跳轉離開 |
1002 | CLOSE_PROTOCOL_ERROR | 因爲協議錯誤而斷開鏈接 |
1003 | CLOSE_SUPPORTED | 因爲收到不容許的數據而斷開鏈接(例如:僅接收文本數據的終端接收了二進制數據) |
1004 | 保留 | |
1005 | CLOSE_NO_STATUS | 保留 . 表示沒有收到預期的狀態碼. |
1006 | CLOSE_ABNORMAL | 保留 . 用於指望收到狀態碼時鏈接非正常關閉 (也就是說, 沒有發送關閉幀). |
1007 | Unsupported Data | 因爲收到了格式不符的數據而斷開鏈接 |
1008 | Policy Violation | 因爲收到不符合約定的數據而斷開鏈接 |
1009 | CLOSE_TOO_LARGE | 因爲收到過大的數據幀而斷開鏈接 |
1010 | Missing Extension | 客戶端指望服務器商定一個或者多個拓展,但服務器沒有處理,所以客戶端斷開鏈接。 |
1011 | Internal Error | 客戶端因爲遇到沒有預料的狀況阻止其完成請求, 所以服務端斷開鏈接. |
1012 | Service Restart | 服務因爲重啓斷開鏈接 |
1013 | Try Again Later | 服務器因爲臨時緣由斷開鏈接 |
1015 | TLS Handshake | 保留. 表示鏈接因爲沒法完成 TLS 握手而關閉 (例如沒法驗證服務器證書). |
詳見:https://wdd.js.org/websocket-close-reasons.html網絡
全雙工(Full Duplex):是通訊傳輸的一個術語。通訊容許數據在兩個方向上同時傳輸,它在能力上至關於兩個單工通訊方式的結合。全雙工指能夠同時(瞬時)進行信號的雙向傳輸(A-》B且B-》A)。例如,電話。socket
半雙工(Half Duplex):指一個時間段內只有一個動做發生。例如:對講機。code
單工:就是隻容許甲方向乙方傳送信息,而乙方不能向甲方傳送。
報錯:
AttributeError: module 'websocket' has no attribute 'WebSocket'
ws = websocket.WebSocket()
緣由:安裝錯module,應該安裝 websocket_client,而不是websocket
參考:https://stackoverflow.com/questions/40212252/python-websockets-module-has-no-attribute