我正在尝试实现一些基于websockets的应用程序,它将与JS客户端密切沟通.
发送消息的代码非常原始:
synchronized (session) {
if (session.isOpen()) {
session.getBasicRemote().sendText(message);
}
}
对于罕见的发送,它工作正常,但当几个线程试图通过相同的会话(套接字)发送一些消息时,抛出下一个异常(请注意,它不是多线程问题,因为代码块是通过会话同步的):
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:1015)
at org.apache.tomcat.websocket.WsRemoteEndpointImplBase$StateMachine.textStart(WsRemoteEndpointImplBase.java:978)
at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendString(WsRemoteEndpointImplBase.java:161)
at org.apache.tomcat.websocket.WsRemoteEndpointBasic.sendText(WsRemoteEndpointBasic.java:37)
谷歌目前并没有这种类型的例外,在这个问题上打了几个小时后,仍然没有解决方案.
Java 7.0.21,在Tomcat 7.0.52和Tomcat 8.0.3上测试.
任何答案都非常感谢!
提前致谢.
更新3/11/2014:我使用Jetty 9.1测试了我的应用程序,但没有发生此异常.
我假设这是Tomcat实现错误.