2017-01-16 2 views
1

Я создал приложение Web-Socket в Wicket с сервером, который посылает сообщения всем клиентам. После регистрации клиентов (приложение, sessionId и Key (PageId)) сервер выталкивает сообщения. Все идет нормально. Но если у меня есть несколько окон браузера одного и того же браузера на одном клиенте, только одно окно получает сообщение и обрабатывает его.Wicket Web Sockets не может работать с несколькими окнами браузера

Все окна (из этого браузера) имеют один и тот же сеанс? Если да, есть ли способ отличаться от них?

ответ

0

Все браузеры (от того же поставщика, например Firefox) будут иметь один и тот же идентификатор сеанса. Но если идентификатор страницы отличается, тогда будут отдельные регистрации веб-сокетов, и все они будут иметь свое собственное соединение, то есть все они смогут отправлять/получать сообщения.

Если вам необходимо получить уведомление от Wicket, когда пользователь открывает вторую вкладку/окно для одного и того же идентификатора страницы, используйте org.apache.wicket.ajax.AjaxNewWindowNotifyingBehavior на странице. Скорее всего, вы захотите использовать setResponsePage(page.getClass()), чтобы создать новый экземпляр той же страницы и создать для него новое соединение WebSocket.

+0

Привет, Я борюсь с той же проблемой. У вашего предлагаемого решения есть одна проблема - отображается страница для новой вкладки - установлено новое подключение к веб-соединению (и оно перезаписывает предыдущее соединение в реестре подключений), и после этого вы получаете уведомление о том, что это новая вкладка. Но вы уже потеряли ссылку на предыдущее соединение. Есть идеи? –

+0

Я попробовал 'RequestCycleListener', который проверяет в' onRequestHandlerResolved', является ли обработчик 'RenderPageRequestHandler' существующего экземпляра страницы, который имеет открытое соединение с websocket. И если так, то он заменяется новым обработчиком для новой страницы. Это работает очень хорошо, но я не могу различить новую вкладку и обновление текущей вкладки. –