網上資料都是介紹概念,我們來看看實際網站怎麼使用websocket的吧。限於自身水平解讀並不深入,慕課網上的websocket某些欄位不知何用。
是什麼
是一種應用層協議,有html5而推出,是一種全雙工的通訊協議,不僅客戶端可以主動向服務端傳送資訊,服務端也可以主動向客戶端傳送資訊。
為什麼
比如更新天氣,比如聊天室,如果用ajax去輪詢耗時,可能header比較大,所以浪費時間吧。而websocket可以主動推送資訊給客戶端,頭比較小。
怎麼用
如果是websocket那麼http協議header欄位upgrade會有websocket標誌。
前端js程式碼,new websocket,send方法傳送
後端springboot引入maven以來,配置endpoint,使用註解onmessage,onstart,可以獲得連結過來的客戶端id。
誰再用?
慕課網,我們看到它使用了websocket,
他的協議頭是wss而不是http,我們看到他用的get方法,網上說他是先通過http請求建立tcp連結,然後再轉型成websocket。
返回碼看到是101 Switching Protocols
與websocket有關的響應頭:
請求頭:
慕課網使用websocket傳送了那些訊息呢?
箭頭抄下的應該是伺服器傳送到客戶端的,裡面有pingInterval,這個應該是心跳的功能,每30秒傳送一次。你看資料2,3就是心跳,14:04:25然後30秒之後14:04:55又接發了一次2,3 。
pingTimeout應該是心跳超時吧,如果50秒沒有心跳,就說明這個連結斷掉了。
sid不知道是標識啥的
這裡面只有url是我當前的瀏覽器訪問的頁面,其他欄位暫時不知道意味著什麼?
這條記錄我測試出來了,他表示我個人賬戶的訊息
之前我這個小鈴鐺有一條未讀訊息,然後這個unreads欄位就一直是1,然後我看完這個未讀訊息他就變成0了。