2017-01-16 3 views
1

Wicket에서 모든 클라이언트에 메시지를 푸시하는 서버가있는 Web-Socket 응용 프로그램을 만들었습니다. 클라이언트 (application, sessionId 및 Key (PageId))를 등록하면 서버가 메시지를 푸시합니다. 여태까지는 그런대로 잘됐다. 그러나 동일한 클라이언트에 동일한 브라우저의 브라우저 창이 여러 개있는 경우 하나의 창에서 메시지를 수신하고 처리합니다.Wicket Web Sockets은 여러 브라우저 창에서 작동하지 않습니다.

동일한 브라우저의 모든 브라우저 창에서 동일한 세션 ID를 공유합니까? 그렇다면 서로 다른 방법이 있습니까?

답변

0

같은 브라우저 (예 : Firefox)의 모든 브라우저는 동일한 세션 ID를 공유합니다. 그러나 페이지 ID가 다른 경우 별도의 웹 소켓 등록이 이루어지며 모든 페이지에 고유 한 연결이 설정됩니다. 즉, 모두가 메시지를 보내고받을 수 있습니다.

사용자가 동일한 페이지 ID에 대해 두 번째 탭/창을 열 때 알림이 필요하면 페이지에서 org.apache.wicket.ajax.AjaxNewWindowNotifyingBehavior을 사용하십시오. 대부분의 경우 setResponsePage(page.getClass())을 사용하여 동일한 페이지의 새 인스턴스를 만들고 새로운 WebSocket 연결을 사용하려고합니다.

+0

안녕하세요, 나는 같은 문제로 strugling 오전. 제안 된 솔루션에는 한 가지 문제가 있습니다 - 새 탭에 대한 페이지가 렌더링 됨 - 새로운 websocket 연결이 설정되고 연결 레지스트리에서 이전 연결을 덮어 씁니다. 그러면이 탭이 새 탭임을 알립니다. 그러나 이전 연결에 대한 참조를 이미 잃어 버렸습니다. 어떤 아이디어? –

+0

핸들러가 webSocket 연결이 열려있는 기존 페이지 인스턴스의'RenderPageRequestHandler'인지'onRequestHandlerResolved'를 검사하는'RequestCycleListener'를 시도했습니다. 그리고 그렇다면 그것은 새로운 페이지를위한 새로운 핸들러로 대체됩니다. 이것은 잘 작동하지만 새 탭과 현재 탭 새로 고침 사이를 구별 할 수는 없습니다. –