resin Websocket 连接或者返回数据时报错: Received unexpected continuation frame.websocket;resin java.lang.Illega

5 篇文章 0 订阅
2 篇文章 0 订阅

以下是我的经验,如果同学们有发现不对的地方和有蹊跷的地方,欢迎指点和提问!

问题

最近在用resin写websocket服务端,前端用原生js ws实现通信时,在连接时报错:

Received unexpected continuation frame.websocket;

同时,在后端返回数据的时候还报错:

resin java.lang.IllegalStateException: IDLE

或:

resin java.lang.IllegalStateException: FIRST

解决

在网上查阅资料没有明确说明的,于是就自己检查后端代码,发现了一个问题,描述问题之前,先说下我的使用情景:

首先,js与后端简历ws连接,成功后js发送一条数据给后端,后端收到后会执行相应的任务,不过是以创建一个线程的方式异步执行,同时会返回js一个类似于“正在执行中,请等待”的字样。

看到这里后,发现了问题,那就是我的代码执行顺序是:(以下用文字伪代码描述)

收到js的数据

创建线程

线程start

返回“执行中请等待。。。”字样

问题就在于,如果那个线程执行的很快,就会出现和返回等待字样的线程一起执行发送数据给前端的操作。

而发送数据用的是resin的WebSocketContext对象(细致的说是:WebSocketContext.startTextMessage()获取的PrintWriter来书写的).所以就会出现一下子把两个数据合并发送的情况,或许跟这个有关系(回想起发现这个问题也确实是线程任务执行很快的时候出现的)。

于是我改成先发送回等待字样,然后在线程start。

就再没出现过问题了。

总结

websocet编程使用异步的时候,要注意writer的多线程下的使用,同时注意下 发送顺序以及前端js对混合数据的处理。

以上是我的经验,如果同学们有发现不对的地方和有蹊跷的地方,欢迎指点和提问!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值