Я пытаюсь реализовать менеджер сеансов веб-сокета, и я только что столкнулся с дорожным блоком, который, я надеюсь, кто-то может мне помочь.Управление и идентификация webcocket Tomcat
В основном клиент инициирует сеанс веб-сокета с моей конечной точкой сервера websocket, и я буду принимать параметры HTTP-запроса, проанализировать его и подписаться на конечную точку производителя веб-сервиса. Веб-служба вернет ответ, содержащий идентификатор подписки, который будет использоваться в качестве сопоставления клавиш (вместе с идентификатором сеанса HTTP), чтобы добавить к кешу Java-карты с объектом сеанса. Продолжайте отправлять данные в мою опубликованную конечную точку webservice. Затем мое приложение берет данные, полученные от производителя, использует идентификатор подписки, который поставляется с каждым пакетом, и находит правильный сеанс в кэшах карты для отправки данных обратно.
Вот моя проблема ..
Я заметил, что, если клиент открывает другую вкладку в браузере и посылает второй запрос на подписку, он все равно будет отправлен с тем же HTTP Session ID еще кот по-прежнему будет иметь возможность для передачи данных на правильную вкладку. Это означает, что реализация webcocket tomcat имеет встроенный механизм мультиплексной обработки.
Чтобы исключить некоторые ненужные данные, если не указано иное, я хочу также иметь возможность идентифицировать все каналы, которые были мультиплексированы под одним и тем же идентификатором сеанса. Но я не могу найти никакого способа в API, чтобы идентифицировать его. Поскольку мне нужно иметь возможность искать мои кеши карт и удалять сеансы для закрытых вкладок (что вызывает метод close в моей конечной точке веб-сокета), но я не смогу это сделать, поскольку может быть многие сокеты/каналы, связанные с тем же идентификатором сеанса HTTP.
не мультиплекс - это просто, что каждая вкладка открывает новый веб-узел. они действительно используют один и тот же сеанс, потому что отправляется тот же файл cookie. Вы можете использовать счетчик ссылок - сколько веб-узлов открыто для сеанса. если он достигает 0, вы можете выполнить некоторую работу по очистке. – ZhongYu
Прежде всего, этот счетчик ссылок вы говорите о session.getId()? Спасибо за ваш ответ – ron
вы можете сохранить карту 'session id -> количество открытых веб-сайтов'. увеличить число, когда ws открыто; уменьшите его, когда ws будет закрыто. он должен быть потокобезопасным. – ZhongYu