Unable to unwrap data, invalid status [CLOSED]-服务端webSocket报错
一、问题由来
现在的项目中在使用webSocket这门技术,主要用来在服务端和客户端进行实时的数据传输,因为需要及时的进行响应,所以才没有使用http请求的方式,
而是使用socket的方式,这样可以快速建立起连接,并且能够将小程序端的操作实时的在客户端unity程序中进行响应。最开始做这个项目的时候,自己对
于技术选型这一块,就考虑使用webSocket,经常会在各种博客、论坛中看到关于它的介绍和使用。而且给人的感觉不是太难,因此就打算使用它。客户端
程序主要是unity程序来进行处理,会和java写的服务端进行实时通信传输很多数据,在刚开始测试的阶段我们都不知道这种方案能不能行得通,在经过多次
反复地测试之后,发现这种方式可行,最终采用这门技术应用于现在的系统当中。可是后来在使用的过程中出现一个问题,就是当webSocket运行出现异常,
比如客户端和服务端的连接由于网络不好断开之后,当网络恢复正常再次进行连接时就会频繁报错,

报错信息是客户端发送的心跳包数据,由于客户端不知道服务端已经出现问题,因此频繁的发送心跳包就一直报错。
二、问题分析
自己在写服务端时,当运行onError方法时,会清除一个唯一的webSocket连接,由于这个项目的特殊性,只需要始终让服务端和客户端保持有一个有效的连接
即可。自己的想法是,明明已经清楚了服务端唯一的连接,为什么还会出现这种问题呢?

这个问题隔三差五的就会出现,必须要解决,如果不解决的话肯定会影响项目的正常运行。
三、解决方案
进过对问题的仔细分析后,自己尝试着去解决这个问题,一个一个地进行尝试。
方案一:在运行出错的时候,主动调用webSocket中提供的关闭连接的方法,使用this来进行调用。

测试结果,没有解决。
方案二:在运行出错的时候,主动获取集合里面的那个唯一的webSockerServer对象,然后使用这个对象来调用onClose方法,并且关闭当前的连接
会话session。

代码修改好之后,和客户端进行反复的联调测试,发现问题解决。解决这个问题的思路就是,如果服务端运行出现异常,就在服务端主动
关闭这个连接;当这个连接关闭之后,当客户端和服务端想再次进行通信时,就会重新创建一个新的连接,保重系统的正常运行。
至此问题解决,可能也是这个项目的特殊性才导致这个项目只需要有一个唯一的连接就可以,遇到的问题也比较好解决。总结一下就是如果
服务端想关闭掉某个连接,则最好是先找到这个webSocket这个连接,然后关闭即可,还有关闭当前的会话信息,不能使用集合直接清除,
直接清除结合的话,webSocketServer是清除了,可是连接会话信息却还在,因此导致我出现那个问题。
Unable to unwrap data, invalid status [CLOSED]-服务端webSocket报错的更多相关文章
- 【使用WCF,发布服务端浏览报错】未能从程序集“System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089” 中加载类型 “System.ServiceModel.Activation.HttpModule”。
问题: 在WIN7中的IIS服务器中部署WCF服务程序时,通过浏览器访问报出如下错误: 未能从程序集"System.ServiceModel, Version=3.0.0.0, Cultur ...
- SpringBoot注册Windows服务和启动报错的原因
SpringBoot注册Windows服务和启动报错的原因 Windows系统启动Java程序会弹出黑窗口.黑窗口有几点不好.首先它不美观:其次容易误点导致程序关闭:但最让我匪夷所思的是:将鼠标光标选 ...
- 【spring boot】spring cloud下spring boot微服务启动没有报错,但是访问访问不到
spring cloud下spring boot微服务启动没有报错,但是访问访问不到 解决方法: 可能是端口被占用了,但是依旧启用成功了. 更改一下项目启用的端口号,再重新启动查看是否可以正常访问.
- 阿里云服务执行mysql_install_db报错
问题描述:阿里云服务执行mysql_install_db报错解决方案:安装autoconf库(yum -y install autoconf)然后在执行:mysql_install_db就会出现这样, ...
- Eureka 客户端连接Eureka服务端时 报Cannot execute request on any known server 解决办法
报Cannot execute request on any known server 这个错,总的来说就是连接Eureka服务端地址不对. 因为配置eureka.client.serviceUrl. ...
- systemctl status ssh.service 服务重启出现报错
Case: ubuntu在从Ubuntu 16.04 LTS 升级到18.04 的时候,执行 do-release-upgrade -d 后,发现ssh无法登陆服务器, Solution: 1.通过s ...
- 【Solr】新建core后,启动服务访问web报错 HTTP Status 503
新建core collection2后,启动solr服务,访问solr web界面报错. HTTP Status 503 - Server is shutting down or failed to ...
- c#实现服务端webSocket
现阶段socket通信使用TCP.UDP协议,其中TCP协议相对来说比较安全稳定!本文也是来讲解TCP为主(恕在下学艺不精). 下面是个人理解的tcp/ip进行通讯之间的三次握手! 1.客户端先发送报 ...
- 【WebSocket No.1】实现服务端webSocket连接通讯
前言 现阶段socket通信使用TCP.UDP协议,其中TCP协议相对来说比较安全稳定!本文也是来讲解TCP为主(恕在下学艺不精). 下面是个人理解的tcp/ip进行通讯之间的三次握手! 1.客户端先 ...
随机推荐
- selenium--常用判断
获取页面 title 的方法可以直接用 driver.title 获取到,然后也可以把获取到的结果用做断言.1.首先导入 expected_conditions 模块:from selenium.we ...
- 深入浅出WPF-04.x名称空间详解
x名称空间详解 几个需要特别说明的名称空间: x:Class 用来标记XAML和后台代码之间的合并关系.x:Class根节点的类型必须和x:Class值指向的类型保持一致.x:Class的值指向的类型 ...
- 解决导入MAVEN项目报错Dynamic Web Module 3.1 requires Java 1.7 or newer.
解释:web模块需要使用java1.7及以后的版本,目前的版本不符合.因而只需要修改java版本到1.7及以上即可. 解决方法: 1.保证 在eclipse 构建 web中关于java版本有三处需要修 ...
- Winform 实现图片轮播(解决Image.FromFile内存不足)
前言 最近项目中需要在winform中做一个类似于网页那种轮播的效果,这里做下记录. 实现 整体的实现思路如下: 读取图片文件夹. 建立一个集合存储Image对象. 定时器定时更换PictrueBox ...
- typora博客笔记上传图片时不能显示
前言 markdown具有轻量化.易读易写等特性,并且对于图片.超链接.图片.数学公式都有支持. 但是最近在使用Typora的过程中我发现,在写文章笔记的时候导入的图片,因为图片保存在我们电脑本地,当 ...
- CF123E Maze(期望dp,树形dp,式子)
题目大意: 给你一棵树,边权都是1,每一个点有一个是起点的概率和一个是终点的概率,你将以起点为根,开始在树上随机dfs,每到一个点,就会将他的所有儿子随机打乱成序列,然后按照那个随机顺序走完,直到走到 ...
- Java(16)修饰符
作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201619.html 博客主页:https://www.cnblogs.com/testero ...
- 在hive中使用COALESCE进行空值处理
COALESCE (expression_1, expression_2, ...,expression_n)依次参考各参数表达式,遇到非null值即停止并返回该值.如果所有的表达式都是空值,最终将返 ...
- 天脉2(ACoreOS653)操作系统学习02
天脉2(ACoreOS653)操作系统学习02 一.分区内通信方法 分区内通信指同一分区内进程之间的通信.ARINC 653定义的分区内进程通信机制,包括:缓存队列(Buffers-Queue).黑板 ...
- .Net2.0连接PG数据注意事项
.Net2.0连接PG数据注意事项 第一次用.net操作PG[.NET2.0] 一:Npgsql版本问题 1:如果是.net2.0 建议用2.0.11.0[NuGet搜索npgsql第一个的最低版本 ...