Я подключаю сервер, используя java websocket, при подключении я сохраняю сеанс в hashmap следующим образом:
if (CollectionUtils.isNotEmpty(roomPlayCount)) {
roomPlayCount.stream().forEach(item -> {
Integer currentOnlineCount = item.getOnlineCount();
Integer roomSeatsCount = getRoomMaxAmount(roomTypeResponses, item.getRoomId());
Double ratio = ((double) currentOnlineCount / roomSeatsCount) * 100;
if (ratio.intValue() < playRatio) {
createWebsocketConnection(token, item.getRoomId(), userInfo);
}
});
}
Это функция сохранения:
private void createWebsocketConnection(String token, Long roomTypeId, Response<UserInfoResponse> userInfo) {
WebsocketClientEndpoint websocketClientEndpoint = RobotClientOperation.robotNewConnect(roomTypeId, token);
if (StringUtils.isNotBlank(token) && websocketClientEndpoint != null) {
Long userId = userInfo.getResult().getUserId();
String sessionId = websocketClientEndpoint.userSession.getId();
if (!websockSessions.containsKey(token)) {
if (!isDulplicateUser(userId)) {
ClientSession clientSession = new ClientSession(userId, token, websocketClientEndpoint.userSession);
websockSessions.put(sessionId, clientSession);
}
} else {
log.error("获取到了重复用户:" + JSON.toJSONString(userInfo));
}
}
}
но когда я получил сообщение от сервера, я не могу получить сеанс с идентификатором.
if (PlayRoomOperate.websockSessions.get(session.getId()) == null) {
//log.warn("can not find record:" + session.getId());
return;
}
Идентификатор сеанса изменился? Что бы это случилось? Вчера он работал нормально. Я обнаружил, что когда я перемещаю операцию создания за пределы потока foreach, он работает нормально. При перемещении внутреннего foreach возникает ситуация.