2016-07-05 6 views
3

Я использую GF 4 как сервер JavaEE.Является ли каждый метод ServerEndpoint выполненным по разному потоку?

Вот как я понимаю обработку сервлетов: есть пул потоков, и когда запрос приходит, один поток из этого пула берется для обработки запроса. После этого поток возвращается в пул.

Основываясь на информации выше, я полагаю (я не уверен), что WebSockets (конечные сервера точек) обрабатываются следующим образом: Существует пул потоков, когда

  • Клиент создает новый WebSocket нить берется из пула, чтобы создать новый экземпляр ServerEndpoint и выполнить метод @OnOpen. После этого поток возвращается в пул.
  • Клиент отправляет сообщение через websocket на сервер. Тема берется из пула для выполнения метода @OnMessage. После этого поток возвращается в пул.
  • Клиент закрывает websocket - поток берется из пула для выполнения метода @OnClose. После этого поток возвращается в пул.

Все это означает, что каждый метод ServerEndpoint может выполняться разными потоками. Правильно ли я понимаю?

ответ

3

Да.

Экземпляр ServerEndpoint живет до тех пор, пока соответствующий сеанс WebSocket доступен как аргумент Session во время @OnOpen. Во время этого сеанса WebSocket многие запросы HTTP и WebSocket могут быть запущены. Каждый такой запрос является отдельным потоком.

Другими словами, если ваш класс ServerEndpoint должен иметь дело с экземплярами переменных по нескольким причинам по какой-либо причине, он должен быть реализован поточно-безопасным способом. В зависимости от конкретного функционального требования вы, вероятно, лучше использовали бы Session#getUserProperties(), чтобы переносить состояние, связанное с сеансом WS (подумайте об этом как атрибутах сеанса).

Отмечено, что все это независимо от используемого контейнера и реализации WS.

+0

Благодарим вас за ответ. Может быть, вы знаете - есть session.isOpen(). Что вернет этот метод и почему, если клиентский компьютер внезапно отключится? –

+0

Добро пожаловать. Для каждого нового вопроса просто задайте новый вопрос. – BalusC

 Смежные вопросы

  • Нет связанных вопросов^_^