之前文章介绍了websocket注入service快速解决方案
在运行之后无异常, 但是今天发送信息时后台抛出java.lang.IllegalStateException异常, 虽然对运行无影响, 但是这不是要逼死强迫症吗, 于是开始百度
异常完整信息:
java.lang.IllegalStateException: the remote endpoint was in state [TEXT_PARTIAL_WAITING]
异常为response.sendRedirect抛出 websocket尝试在同一时间操作session导致
在sendMessage的时候将session锁住
synchronized(session) {
session.sendMessage()}
发送信息的时候不会报错, 但是前端异常结束仍然会抛出这个错误,因为没有执行closeSocket操作,后台不知道这个session已经断开,没有移除队列。在获取错误方法中添加移除操作,就行了。抛一次错就将这个session移除,前端重新连接就好了
PS:这里划重点:多半都是因为你在捕获错误后对前端发送信息导致,在错误发生的时候此session就已经断开了,再通过这个发信息前端收不到肯定就是等待状态了啊。。。因为我用的是安全队列,刚开始我也想了半天为什么会有阻塞,其实真正根源在这里!!
网友评论