Java-WebSockets: Die remote-Endpunkt war im Zustand [TEXT_FULL_WRITING]

Ich versuche zu implementieren ist eine Anwendung basierend auf websockets die Kommunikation mit JS Kunden sehr intensiv.

Den code um die Nachricht zu senden ist ziemlich primitiv:

synchronized (session) {
    if (session.isOpen()) {
        session.getBasicRemote().sendText(message);
    }
}

Für seltene senden funktioniert es ganz gut, aber wenn paar threads zu senden versuchen, einige Nachrichten von der gleichen session (Buchse), weiter Ausnahme geworfen wird (bitte beachten Sie, dass es ist nicht multithreading-Problem, weil code-block synchronisiert Sitzung):

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)

Google ist nicht Reich an solchen Typ der Ausnahmen, die in dem moment, und nach dem schlagen einige Stunden auf dieses Problem noch keine Lösung.

Java 7.0.21, getestet auf Tomcat 7.0.52 und Tomcat 8.0.3.

Jede Antwort wird sehr geschätzt!
Vielen Dank im Voraus.

UPDATE 3/11/2014: getestet habe ich meine Anwendung mit Jetty 9.1 und diese Ausnahme nicht auftreten.
Ich gehe davon aus, dass dies Tomcat Umsetzung bug.

InformationsquelleAutor walv | 2014-03-07
Schreibe einen Kommentar