1. 程式人生 > >解決前端websocket資料幀接收資料大小限制(資料分幀)問題

解決前端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碼,所以上面的程式碼就不難理解了