Веб-сокет Tomcat TEXT_FULL_WRITING

В Tomcat 8.5.9 метод session.getAsyncRemote(). SendText () выбрасывает

java.lang.IllegalStateException: удаленная конечная точка была в состоянии [TEXT_FULL_WRITING]

Я создал мьютекс, полученный до вызова методов для отправки и освобожденный после вызова:

 sendMutex.acquireUninterruptibly();
    try{
      session.getAsyncRemote().sendText(gson.toJson(message));
    }catch(Exception exception){
      logger.error("Session : "+session.getId()+" message : "+gson.toJson(message)+" exception : "+exception.getMessage(),exception);
    }
    sendMutex.release();

Но исключение по-прежнему выдается при вызове этого метода. Нет вызовов к session.getAsyncRemote(). SendText () или session.getBasicRemote (). SendText (), кроме этого метода. ServerEndpoint возвращает void в методе onMessage.

Спасибо

1 ответ

Была такая же проблема. Я нашел, что это решение работает, кажется, не создает других проблем.

      this.session.getBasicRemote().sendObject(message);

Вместо того, чтобы использовать

      this.session.getAsyncRemote().sendObject(message);

По-видимому, это обычная проблема с tomcat и способ одновременного доступа к экземпляру сеанса веб-сокета из разных потоков.

      synchronized(ep)
    {
        this.session.getAsyncRemote().sendObject(message);
    }

где ep — статический объект, который, по моему опыту, тоже не работал.

Другие вопросы по тегам