解决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错误就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
java 实现websocket的两种方式实例详解
一.介绍 1.两种方式,一种使用tomcat的websocket实现,一种使用spring的websocket 2.tomcat的方式需要tomcat 7.x,JEE7的支持. 3.spring与websocket整合需要spring 4.x,并且使用了socketjs,对不支持websocket的浏览器可以模拟websocket使用 二.方式一:tomcat 使用这种方式无需别的任何配置,只需服务端一个处理类, 服务器端代码 package com.Socket; import java.io
-
基于java实现websocket协议过程详解
最近了解了下websocket和socket这个东西,说不得不来说下为何要使用 WebSocket ,和为何不用http. 为何需要WebSocket ? HTTP 协议是一种无状态的.无连接的.单向的应用层协议.它采用了请求/响应模型.通信请求只能由客户端发起,服务端对请求做出应答处理. 这种通信模型有一个弊端:HTTP 协议无法实现服务器主动向客户端发起消息. 这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦.大多数 Web 应用程序将通过频繁的异步JavaScr
-
使用Java和WebSocket实现网页聊天室实例代码
在没介绍正文之前,先给大家介绍下websocket的背景和原理: 背景 在浏览器中通过http仅能实现单向的通信,comet可以一定程度上模拟双向通信,但效率较低,并需要服务器有较好的支持; flash中的socket和xmlsocket可以实现真正的双向通信,通过 flex ajax bridge,可以在javascript中使用这两项功能. 可以预见,如果websocket一旦在浏览器中得到实现,将会替代上面两项技术,得到广泛的使用.面对这种状况,HTML5定义了WebSocket协议,能更
-
解决websocket 报 Could not decode a text frame as UTF-8错误
当你使用websocket传输数据时,偶尔可能会出现下面的错误 websocket Could not decode a text frame as UTF-8 网上很多其他文章一上来就介绍什么是websocket,数据协议等等,对解决问题没有多大帮助. 有一些文章说要改开头数字10000001等等,很多同学不知所云. 下面说说个人的经验,不一定对,希望对大家有个帮助. 首先如果你使用的是相对成熟的websocket框架的话,一般不会出现这个问题. 而出现这个问题的原因,绝大部分是客户端和服务器
-
解决React报错Cannot assign to 'current' because it is a read-only property
目录 总览 正确的泛型 DOM元素 总览 当我们用一个null值初始化一个ref,但在其类型中不包括null时,就会发生"Cannot assign to 'current' because it is a read-only property"错误.为了解决该错误,请在ref的类型中包含null.比如说,const ref = useRef<string | null>(null) . 这里有个例子来展示错误是如何发生的. // App.tsx import {useEf
-
解决React报错Parameter 'props' implicitly has an 'any' type
目录 总览 安装类型文件 声明类型 泛型 重新安装 总览 当我们没有为函数组件或者类组件的props声明类型,或忘记为React安装类型声明文件时,会产生"Parameter 'props' implicitly has an 'any' type"错误.为了解决这个错误,在你的组件中明确地为props对象设置一个类型. 安装类型文件 你首先要确定的是你已经安装了React类型声明文件.在项目的根目录下打开终端,并运行以下命令. # ️ with NPM npm install --s
-
解决React报错Property 'value' does not exist on type EventTarget
目录 总览 正确声明类型 找出类型 总结 总览 当event参数的类型不正确时,会产生"Property 'value' does not exist on type EventTarget"错误.为了解决该错误,将event的类型声明为React.ChangeEvent<HTMLInputElement> .然后就可以通过event.target.value 来访问其值. 这里有个示例用来展示错误是如何发生的. // App.tsx function App() { //
-
解决React报错Property 'X' does not exist on type 'HTMLElement'
目录 总览 类型断言 总结 总览 在React中,当我们试图访问类型为HTMLElement 的元素上不存在的属性时,就会发生Property 'X' does not exist on type 'HTMLElement'错误.为了解决该错误,在访问属性之前,使用类型断言来正确地类型声明元素. 这里有三个例子来展示错误是如何发生的. // App.tsx import {useEffect} from 'react'; export default function App() { useEf
-
解决nginx报错信息 client intended to send too large body: 1331696 bytes
解决nginx报错信息 client intended to send too large body: 1331696 bytes 1,nginx后台error日志报错 2016/02/05 16:23:56 [error] 12024#0: *441106971 connect() failed (111: Connection refused) while connecting to upstream, client: 113.214.1.10, server: localhost, req
-
解决python报错MemoryError的问题
如下: python 32bit 最大只能使用 2G 内存,坑爹之处,超过 2G 报错MemoryError. 而 64bit python则无此限制,所以建议使用 64bit python. 可能存在的问题:以前 numpy.scipy 官方的库只支持 32bit python,现在应该发布了 64bit 对应版本. 以上这篇解决python报错MemoryError的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.
-
完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误
报错信息 最近闲来无事,用python的tkinter库开发了一款带日程提醒的万年历桌面程序.在程序开发结束开始打包时,却发现一直报错 PyInstaller cannot check for assembly dependencies. Please install PyWin32 or pywin32-ctypes. pip install pypiwin32 但是运行pip install pypiwin32时却提示两个库都已经安装过了 可是当再运行打包脚本时就是死活无法打包,就是提示缺少
-
解决android报错:Intel HAXM is required to run this AVD
今天,简单讲解Android 启动模拟器时,提示错误: Intel HAXM is required to run this AVD. VT-x is disabled in BIOS. Enable VT-x in your BIOS security settings (refer to documentation for your computer)的问题. 这个问题其实是Android studio是否下载了Download Intel x86 Emulator Accelerator
-
Python+Selenium定位不到元素常见原因及解决办法(报:NoSuchElementException)
在做web应用的自动化测试时,定位元素是必不可少的,这个过程经常会碰到定位不到元素的情况(报selenium.common.exceptions.NoSuchElementException),一般可以从以下几个方面着手解决: 1.Frame/Iframe原因定位不到元素: 这个是最常见的原因,首先要理解下frame的实质,frame中实际上是嵌入了另一个页面,而webdriver每次只能在一个页面识别,因此需要先定位到相应的frame,对那个页面里的元素进行定位. 解决方案: 如果iframe
随机推荐
- Javascript倒计时页面跳转实例小结
- js兼容pc端浏览器并有多种弹出小提示的手机端浮层控件实例
- G8.3做的GHO G8.3不识别的问题的完美解决方案!
- Java读取文件及基于正则表达式的获取电话号码功能详解
- JS实现简单的右下角弹出提示窗口完整实例
- 关于页面被拦截的问题
- Javascript实现div层渐隐效果的方法
- Linux下CoreSeek及PHP扩展模块的安装
- PHP下载生成的csv文件及问题总结
- Mysql 4.1 Windows 下升级问题
- PHP实现的英文名字全拼随机排号脚本
- C# WinForm窗口最小化到系统托盘
- 基于RxPaparazzo实现图片裁剪、图片旋转、比例放大缩小功能
- canvas绘图不清晰的解决方案
- Python中的异常处理简明介绍
- 编写线程安全的JSP程序
- 十大经典误会
- Java配置JDK开发环境及环境变量
- C#使用Selenium+PhantomJS抓取数据
- php中static和const关键字用法分析