websocket 發送數據時報 Status code: Invalid frame payload data (1007),Reason: Invalid UTF-8 的原因及處理辦法


故障現現象:

今天用asp.netcore中間件升級了websocket服務器,在偶爾的情況下會發生服務器斷開連接,並拋出錯誤: Invalid UTF-8。以前用.net寫的服務器代碼並沒有出現這個錯誤,到處查閱資料也沒有得到解決辦法。

自己通過不斷的嘗試及分析,發現主要是含有中文的消息發送時服務器會斷開,但一些含有中文的消息也不報錯,初步懷疑是數據庫中或者別的途徑中含有非UTF8編碼的文字,而Javascript不會處理這些文字而直接發送,服務器發現以后就斷開連接。

處理方法:

查詢了很多文檔,都沒有說怎么處理,我自己想,Javascript發送數據時,按UTF8發送導致編碼時出現問題,那我原樣發送到服務器,服務器是按Byte數組接收的,會不會沒有問題呢?

說干就干,在發送的地方按2進制發送,果然發送成功。

代碼原來的樣子:

this.socket.send(JSON.stringify(message));

修改后的樣子:

var blob = new Blob([JSON.stringify(message)]);
this.socket.send(blob);

修改后,會有一點點不太方便:chrome中無法直接看發送的消息,發送記錄中都顯示Binary Data。


免責聲明!

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



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