服务端发送消息给客户端失败java.lang.IllegalStateException: The remote endpoint was in state [TEXT_FULL_WRITING]

The remote endpoint was in state [TEXT_FULL_WRITING] which is an invalid state for called method的问题在于:

handlerA和handlerB两个方法有可能同时执行,当A或者B方法遍历到某一个session并且调用sendMessage发送消息的时候,另外一个方法也正好也在使用相同的session发送另外一个消息(同一个session消息发送冲突了,也就是说同一个时刻,多个线程向一个socket写数据冲突了),就会报TEXT_FULL_WRITING异常。

一般采用的解决方案是:

使用同步锁加同步发送(session.getBasicRemote())的方式,但很多时候需要异步发送。

在我的项目中,采用Tomcat,TEXT_FULL_WRITING会直接导致websocket连接断掉,采用这种解决方案能保证一个session同时只会在发送一条消息,所以避免了TEXT_FULL_WRITING错误。

这种解决方案只是利用一种缓冲加惰性判断的方式,并不是标准解决方案,如果觉得这种方案有什么问题,或者有更好的方案,可以大家讨论下。
 

猜你喜欢

转载自blog.csdn.net/wufaqidong1/article/details/129857812