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連接關閉】");
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM