2017-01-16 5 views
1

Wicketですべてのクライアントにメッセージをプッシュするサーバーを持つWebソケットアプリケーションを作成しました。クライアント(アプリケーション、セッションID、およびキー(PageId))を登録すると、サーバーはメッセージをプッシュします。ここまでは順調ですね。しかし、同じクライアント上に同じブラウザのブラウザウィンドウが複数ある場合、1つのウィンドウだけがメッセージを受信して​​処理します。Wicket Web Socketsは複数のブラウザウィンドウでは動作しません

(同じブラウザの)すべてのブラウザウィンドウが同じsessionIdを共有していますか?はいの場合、それらの間で異なる方法がありますか?

答えて

0

すべてのブラウザ(Firefoxなどの同じベンダー)は、同じセッションIDを共有します。しかし、ページIDが異なる場合、別個のウェブソケット登録があり、それらのすべてが独自の接続を有する。すなわち、それらのすべてがメッセージを送受信することができる。

ユーザーが同じページIDの2番目のタブ/ウィンドウを開いたときにWicketによって通知される必要がある場合は、そのページでorg.apache.wicket.ajax.AjaxNewWindowNotifyingBehaviorを使用してください。ほとんどの場合、setResponsePage(page.getClass())を使用して同じページの新しいインスタンスを作成し、新しいWebSocket接続を作成したいと思うでしょう。

+0

こんにちは、私は同じ問題を抱えています。提案されたソリューションには1つの問題があります。新しいタブのページがレンダリングされます。新しいWebSocket接続が確立されます(接続レジストリの以前の接続が上書きされます)。その後、新しいタブであることが通知されます。しかし、あなたはすでに前の接続への参照を失ってしまっています。何か案は? –

+0

私は 'onRequestHandlerResolved'をチェックする' RequestCycleListener'を試しました。ハンドラがWebSocket接続が開いている既存のページインスタンスの 'RenderPageRequestHandler'であるかどうかを調べました。そうであれば、新しいページの新しいハンドラに置き換えられます。これはかなりうまくいくが、新しいタブと現在のタブのリフレッシュを区別することはできない。 –

関連する問題