WebSocket错误:java.lang.IllegalStateException: The WebSocket session [1] has been closed and no method (apart from close()) may be called on a closed session

 主要原因:在建立连接存储对象信息的时候保存了用户ID,在断开连接时移除当前对象失败

private static CopyOnWriteArraySet<AcceptWebSocket> webSocketSet = new CopyOnWriteArraySet<>();
@OnOpen
public void onOpen(@PathParam("userid") Integer id, Session session) {
    this.session = session;
this.userid = id;
webSocketSet.put(userid, this);//用户id 和session绑定
logger.info("【新的socket连接】");
}

修改:通过判断所有登录的用户是否属于当前用户组,实现单发或者群发。
/**
* 打开连接时
*
* @param session
*/
@OnOpen
public void onOpen(@PathParam("userid") Integer userid, Session session) {
this.session = session;
this.work = userService.selectUserId(userid);
webSocketSet.add(this);
logger.info("【新的socket连接】");
}

/**
* 向所有连接客户端推送消息
*/
public void sendWebSocketMessage(String message) {
try {
if (webSocketSet.size() != 0) {
for (AcceptWebSocket p : webSocketSet) {
if (p != null && p.work == 3) {
p.session.getBasicRemote().sendText(message);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}

/**
* 关闭连接时
*/
@OnClose
public void onClose() {
webSocketSet.remove(this);
logger.info("【socket连接关闭】");
}
posted @ 2018-09-27 18:08  依旧爱你  阅读(8887)  评论(1编辑  收藏  举报