欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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;
            }
            // 当用发送成功后需添加 用户信息到列表中

        }
    }