Ошибка двоичной частичной записи

Код непосредственно ниже пытается отправить сообщение через веб-узел Java; однако иногда он вызывает ошибку (указанную ниже в стеке ошибок). Может ли кто-нибудь предположить, что это проблема?

Код:

if(currSession != null && currSession.isOpen()) {
 try {
 currSession.sendMessage(new BinaryMessage(flowTable.getBytes()));
 } catch (IOException e) {
 e.printStackTrace();
 }

Стек ошибок:

java.lang.IllegalStateException: The remote endpoint was in state [BINARY_PARTIAL_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.binaryPartialStart(WsRemoteEndpointImplBase.java:963)
 at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendPartialBytes(WsRemoteEndpointImplBase.java:140)
 at org.apache.tomcat.websocket.WsRemoteEndpointBasic.sendBinary(WsRemoteEndpointBasic.java:56)
 at org.springframework.web.socket.adapter.standard.StandardWebSocketSession.sendBinaryMessage(StandardWebSocketSession.java:202)
 at org.springframework.web.socket.adapter.AbstractWebSocketSession.sendMessage(AbstractWebSocketSession.java:107)
 at com.hp.fucms.impl.TopoRestController.setFlowTable(TopoRestController.java:147)
1 ответ

Оберните свой код синхронным методом и вызовите все вызовы с помощью этого нового метода. Похоже, что веб-сокет tomcat не может обрабатывать несколько сообщений, размещенных одновременно на одном сеансе websocket. У меня есть код, который безупречно работает под Glassfish и мгновенно распался, когда я переехал в Tomcat. Затем я изменил свой код, как объяснялось выше, и все мои проблемы исчезли... и было много радости.

licensed under cc by-sa 3.0 with attribution.