2017-01-16 83 views
1

我在Wicket中創建了一個Web-Socket應用程序,該應用程序具有將消息推送到所有客戶端的服務器。註冊客戶端(應用程序,sessionId和密鑰(PageId))後,服務器會推送消息。到現在爲止還挺好。但是,如果我在同一個客戶端上有同一瀏覽器的多個瀏覽器窗口,則只有一個窗口會收到該消息並對其進行處理。Wicket Web Sockets無法在多個瀏覽器窗口中工作

所有瀏覽器窗口(同一瀏覽器)共享同一個sessionId嗎?如果是的話,他們之間有什麼區別?

回答

0

所有瀏覽器(來自同一供應商,例如Firefox)將共享相同的會話ID。但是,如果頁面ID不同,那麼將會有單獨的網絡套接字註冊,並且它們都將擁有自己的連接,即所有這些都將能夠發送/接收消息。

如果您需要通過Wicket通知用戶打開第二個標籤頁/窗口爲相同的頁面ID,然後使用頁面上的org.apache.wicket.ajax.AjaxNewWindowNotifyingBehavior。很可能您會希望使用setResponsePage(page.getClass())創建同一頁面的新實例,併爲其創建新的WebSocket連接。

+0

嗨,我正在與同樣的問題苦苦掙扎。您提出的解決方案有一個問題 - 呈現新選項卡的頁面 - 建立新的websocket連接(並且會覆蓋連接註冊表中的以前連接),然後通知您這是一個新選項卡。但是你已經失去了對前一次連接的引用。有任何想法嗎? –

+0

我已經嘗試過'RequestCycleListener',它檢查'onRequestHandlerResolved'是否處理程序是已打開websocket連接的現有頁面實例的'RenderPageRequestHandler'。如果是這樣,它將被替換爲新頁面的新處理程序。這工作相當不錯,但我無法區分新標籤頁和刷新當前標籤頁。 –

相關問題