[TEXT_FULL_WRITING]异常处理

前段时间项目用到websocket技术,偶然过程遇到过sendMessage出现异常的情况。

The remote endpoint was in state [TEXT_FULL_WRITING] which is an invalid state for called method

java.lang.IllegalStateException: The remote endpoint was in state [TEXT_FULL_WRITING] which is an invalid state for called method

at org.apache.tomcat.websocket.WsRemoteEndpointImplBase$StateMachine.checkState(WsRemoteEndpointImplBase.java:1148)

=======================

查了一些资料没有找到,只好先使用重试机制,出现异常时回调监听将任务重新扔进线程池。

现在空闲了一点,准备着手测试一下这个问题产生的原因。

这主要是一个线程安全的问题。

网上出现这个问题的也主要有两种情况

一种是,onMessage方法有返回值,导致onMessage无法被sync block控制。

一种是,session没有被同步控制,导致多线程情况下,出现IllegalStateException

保证以上两点之后

使用session.getBasicRemote()应该是没有问题的。

session.getAsyncRemote()可能是tomcat有bug引起,依旧会出现TEXT_FULL_WRITING


参考:

    https://stackoverflow.com/questions/22257079/java-websockets-the-remote-endpoint-was-in-state-text-full-writing

http://grokbase.com/t/tomcat/dev/141hss8qaj/bug-56026-new-remoteendpoint-async-sendtext-string-sendhandler-not-thread-safe

你可能感兴趣的:([TEXT_FULL_WRITING]异常处理)