网站地图    收藏   

主页 > 后端 > java >

解决websocket 报 Could not decode a text frame as UTF-8错误

来源:自学PHP网    时间:2020-10-09 10:30 作者:小飞侠 阅读:

[导读] 解决websocket 报 Could not decode a text frame as UTF-8错误...

今天带来解决websocket 报 Could not decode a text frame as UTF-8错误教程详解

当你使用websocket传输数据时,偶尔可能会出现下面的错误

websocket Could not decode a text frame as UTF-8

网上很多其他文章一上来就介绍什么是websocket,数据协议等等,对解决问题没有多大帮助。

有一些文章说要改开头数字10000001等等,很多同学不知所云。

下面说说个人的经验,不一定对,希望对大家有个帮助。

首先如果你使用的是相对成熟的websocket框架的话,一般不会出现这个问题。

而出现这个问题的原因,绝大部分是客户端和服务器端的指定的 “binaryType” 不一致。

要解决问题,首先要弄清楚问题所在,我们先了解一下这个binaryType是什么:

WebSocket.binaryType 返回websocket连接所传输二进制数据的类型。

它有两个值:

 "blob"  如果传输的是 Blob 类型的数据。

"arraybuffer"  如果传输的是 ArrayBuffer 类型的数据。

通常,如果不指定这个值,默认一般是:blob   顾名思义就是任意对象

正常而言,如果binaryType=blob,传输字符串(String)类型,一般没有什么问题。但如果这个时候传一个 byte[] 数组或者二进制数组,可能就会出现Could not decode a text frame as UTF-8 的问题。

对于websocket而言,如果直接传输txt文本。那么opcode一般等于1(opcode是什么可以自行百度)。而直接send byte[] 或者二进制数组时,opcode一般等于2。

当binaryType=blob时,一般会把数据直接当成字符串对象解析,此时如果传递的是byte[]。就会报Could not decode a text frame as UTF-8 的问题。

解决问题:

一般服务器端和客户端指定相同的binaryType即可解决问题。如果传递二进制数据。指定binaryType=arraybuffer,即可获取数据原始二进制数组,这样不管传递的是什么,都不会报错,在自行根据情况处理。

当然,如果是你直接封装的WebSocketFrame,则opcode要指定为二进制

在js中指定:

socket.binaryType='arraybuffer'  

以上这篇解决websocket 报 Could not decode a text frame as UTF-8错误就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持自学php网。


以上就是关于解决websocket 报 Could not decode a text frame as UTF-8错误全部内容,感谢大家支持自学php网。

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论