解决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错误就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
代码知识SEO上一篇 : 解决Android Studio一直停留在MyApplication:syncing的问题
下一篇 : Spring Cloud OpenFeign REST服务客户端原理及用法解析
-
SEO外包最佳选择国内专业的白帽SEO机构,熟知搜索算法,各行业企业站优化策略!
SEO公司
-
可定制SEO优化套餐基于整站优化与品牌搜索展现,定制个性化营销推广方案!
SEO套餐
-
SEO入门教程多年积累SEO实战案例,从新手到专家,从入门到精通,海量的SEO学习资料!
SEO教程
-
SEO项目资源高质量SEO项目资源,稀缺性外链,优质文案代写,老域名提权,云主机相关配置折扣!
SEO资源
-
SEO快速建站快速搭建符合搜索引擎友好的企业网站,协助备案,域名选择,服务器配置等相关服务!
SEO建站
-
快速搜索引擎优化建议没有任何SEO机构,可以承诺搜索引擎排名的具体位置,如果有,那么请您多注意!专业的SEO机构,一般情况下只能确保目标关键词进入到首页或者前几页,如果您有相关问题,欢迎咨询!