[PHP] websocket協議的生成

  • 2020 年 2 月 11 日
  • 筆記

websocket的概念理解

websocket協議是基於TCP的一種新的網路協議,實現了瀏覽器與伺服器全雙工(full-duplex)通訊.websocket借用http請求進行握手,相比正常的http請求,多了一些內容。

連接請求的內容是:

GET / HTTP/1.1  Connection:Upgrade  Host:127.0.0.1:8088  Origin:null  Sec-WebSocket-Extensions:x-webkit-deflate-frame  Sec-WebSocket-Key:puVOuWb7rel6z2AVZBKnfw==  Sec-WebSocket-Version:13  Upgrade:websocket

伺服器響應的內容是:

HTTP/1.1 101 Switching Protocols  Connection:Upgrade  Server:beetle websocket server  Upgrade:WebSocket  Date:Mon, 26 Nov 2012 23:42:44 GMT  Access-Control-Allow-Credentials:true  Access-Control-Allow-Headers:content-type  Sec-WebSocket-Accept:FCKgUr8c7OsDsLFeJTWrJw6WO8Q= 

服務端接收請求後主要是成針對Sec-WebSocket-Key生成對就Sec-WebSocket-Accept 的key,生成Sec-WebSocket-Accept 值 , 接收到的Sec-WebSocket-Key值拼接258EAFA5-E914-47DA-95CA-C5AB0DC85B11這個字元串進行sha1加密,然後在base64編碼即可 

Upgrade: websocket Connection: Upgrade,告訴瀏覽器即將升級的是Websocket協議,一旦WebSocket連接建立後,後續數據都以幀序列的形式傳輸.

使用workerman的客服系統,查看websocket監聽7272埠的通訊如下:

tcpdump -i any port 7272 -l -s 0 -w -|strings