WebSocket注意事項


使用java開發websocket服務, 有兩種主流框架, 一種是通過spirng-websocket一種是通過javax, 兩者的使用方式都很簡單, 這里推薦使用spring-websocket, 對於websocket協議標准支持比較完善

websocket超時時間

spring-websocket javax
連接超時時間 默認與服務器web session, 一般為30分鍾 默認60s

由於目前前端一般使用nginx服務器發布, websocket連接會回經過nginx代理轉發, nginx默認的連接超時時間為60s, 所以有時候在服務器端設置了大於60s的會話超時時間, 前端仍然會在60s過后就斷開連接, 一種解決方案是將nginx的會話時間設置長一點, 一種是做心跳檢測.

心跳檢測

標准做法

在websocket規范(RFC6455)中 ,WebSocket控制幀有3種:Close(關閉幀)、Ping以及Pong
控制幀是由操作碼上的位值置為1來定義的。
目前,控制幀的操作碼定義了0x08(關閉幀)、0x09(Ping幀)、0x0A(Pong幀)。0x0B-0x0F是為那些將來可能定義而目前尚未定義的控制幀預留的。
控制幀用於WebSocket協議交換狀態信息,控制幀可以插在消息片段之間。
注意:所有的控制幀的負載長度務必不大於125字節,並且禁止對控制幀進行分片處理。
websocket連接心跳ping/pong,**截止目前, 主流瀏覽器中沒有相關api發送ping給服務器, 只能由服務器發ping給瀏覽器, 瀏覽器返回pong消息. **所以, 如果要做心跳連接檢測, 最好的辦法就是在服務端對連接進行檢測

其他做法

標准做法是將心跳信息做到了協議層, 非標准做法則是將ping/pong消息做到應用層, 也就是規定發送的消息格式, 在消息里定好各種狀態, 當解析到ping/pong的狀態碼時做特殊處理, 前后端通過這樣統一的規則進行通信, 這樣也可以實現心跳檢查保持會話不中斷


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM