1.http是無狀態的,並不適合有狀態的場景
2.websocket api
2-1. WebSocket(url, protocol)
url:地址
protocol:協議(1.註冊協議 2.開放協議 3.自定義協議)
2-2. open
2-3. message
2-4. error
2-5. close
2-6. send
2-7. read
3.readyState
3-1. CONNECTING:0
3-2. OPEN:1
3-3. CLOSING:2
3-4. CLOSED:3
4.bufferedAmount:緩衝區數據字節數
5.握手
5-1.websocket sec:
Sec-WebSocket-Key:只能在HTTP請求中出現一次
(用與從客戶端到服務器的websocket初始握手,避免跨協議攻擊)
Sec-WebSocket-Accept:只能在HTTP請求中出現一次
(用於從客戶端到服務器的WebSocket初始握手,確認服務器理解WebSocket協議)
Sec-WebSocket-Extensions:可能在HTTP請求中出現多次,在HTTP響應中只出現一次
(用於從客戶端到服務期的WebScoekt初始握手,然後用於從服務器到客戶端的響應,
這個首標幫助客戶端和服務器約定一組連接期間使用的協議級擴展)
Sec-WebSocket-Protocol:
(用於從客戶端到服務器的WebSocket初始握手,然後用於從服務器到客戶端的響應.
這個首標通告客戶端應用程序可使用的協議.服務器使用相同的首標,在這些協議中的最多選擇一個)
Sec-WebSocket-Version:
(用於從客戶端到服務器的WebSocket初始握手,表示版本兼容性, RFC 6455的版本總是13.
服務器如果不支持客戶端請求的協議版本,則用這個首標響應.在那種情況下,
服務器發送的首標中列出了它支持的版本.這隻發生在RFC 6455之前的客戶端中)
5-2.websocket http 請求:
相比普通的的http請求多了"Upgrade: websocket"選項
6.幀
6-1.幀頭:
操作碼(1byte) + 長度(1byte:1bit是否屏蔽 + 7bit長度) + 擴展長度(0/2/8byte) +
屏蔽(4byte,僅客戶端) + 數據
6-2.操作碼:
類型:
1: 文本
2: 二進制
8: 關閉
9: ping
10:pong
6-3.utf-8是websocket文本消息中允許的唯一編碼
6-4.websocket要求客戶端屏蔽發送的所有幀,一般用4byte做屏蔽碼
7.關閉握手
關閉代碼:
1000:正常關閉
1001:離開
1002:協議錯誤
1003:不可接受的數據類型
1004,1005,1006:保留
1007:無效數據
1008:消息違反政策
1009:消息過大
1010:需要擴展
1011:意外情況
1012:TLS失敗(不要用這個代碼)
關閉代碼範圍解釋:
0~999:禁止使用當前範圍的代碼
1000~2999:保留
3000~3999:需要註冊
4000~4999:私有