解決前端websocket資料幀接收資料大小限制(資料分幀)問題
websocket前後臺出現問題解決方法:
一開始通過限制後臺返回資料幀以125位元組分隔分段資料返回給前臺,但除錯時發現只要加上其他的一些資訊返回json string很容易就會超過了125位元組,於是在後臺修改了這個限制大小為2048,但是這時候前端就出現了無法接收的問題。
丟擲錯誤為:WebSocket connection to 'ws://xxx.xx.xxx.xx:xx/' failed: One or more reserved bits are on: reserved1 = 1, reserved2 = 0, reserved3 = 1
粗略在網上找了一下原因,是因為字元超出125而後臺對資料處理沒有采取策略造成的
於是乎在後臺限制資料幀返回最大為125位元組,這就導致了接收的frame是這樣的:
(上面返回的四條資料幀都是同一條資訊)
用前端處理方法:
這裡我一開始採用的是直接在前臺JSON.parse函式來處理onmessage接收的資料
當資料過大後JSON.parse就會報錯
於是乎我就採用了一個折中的方法:
------------------------------------------------------------------
思想:在監聽函式一開始時先給message設定為空,設定flag為true
onmessage接收到資訊後嘗試去解析成json,如果失敗就捕獲到異常
在異常處理中,給message字串拼接,拼接完成後再嘗試去解析成json,如果解析成功則修改flag為true且將message置為空
用後臺處理方法:(前端不用再分段資料幀接收一條資訊)
在對返回的資料幀處理的方法中:
因為返回的資料幀必須遵守socket協議,socket協議規定返回資料幀頭部必須為資料大小的ascii碼,所以上面的程式碼就不難理解了