故障現現象:
今天用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。