Websocket发送信息报错The WebSocket session [0] has been closed and no method (apart from close()) may be c
程序员文章站
2022-06-06 08:07:02
...
WebSocket后台报错:The WebSocket session [0] has been closed and no method (apart from close()) may be called on a closed session
在这个过程中,前台页面不停的刷新页面,session在不停的关闭和开启,服务器推送数据时,会出现session连接已经被关闭了,但是此时服务器还在给客户端发送消息,就会报错。
解决办法是 在发送数据之前先确认 session是否已经打开 使用session.isOpen() 为true 则发送消息。
public void sendMessageTo(String message, String ToUserName) {
if(StringUtils.isNotBlank(userId) && StringUtils.isNotBlank(ToUserName)){
saveMyMessage(message,ToUserName);
log.info("我的消息------入库,发送用户id是{},消息内容是{},接收者id是{}",userId,message,ToUserName);
}
for (ChatService item : clients.values()) {
log.info("遍历clients中的元素{}",item.userId);
if (item.userId.equals(ToUserName) ) {
item.session.getAsyncRemote().sendText(message);
log.info("我是{},发消息给{}",userId,ToUserName);
break;
}
// 当用发送成功后需添加 用户信息到列表中
}
}