Веб-сокет 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 — статический объект, который, по моему опыту, тоже не работал.