在Tomcat8.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在onMessage方法中返回void。
谢谢
发布于 2022-09-23 19:56:38
也有同样的问题。我找到了这个解决方案的工作,似乎没有造成其他问题。
this.session.getBasicRemote().sendObject(message);而不是使用
this.session.getAsyncRemote().sendObject(message);显然,这是tomcat的一个常见问题,websocket会话实例可以同时从不同的线程访问。
synchronized(ep)
{
this.session.getAsyncRemote().sendObject(message);
}如果ep是一个静态对象,在我的经验中也不起作用。
https://stackoverflow.com/questions/42411679
复制相似问题