Почему идентификатор сессии websocket изменился? - PullRequest
1 голос
/ 03 июля 2019

Я подключаю сервер, используя 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 возникает ситуация.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...