1

誰かが私の問題に答えてくれることを願っています。gwt-webapp では、通常 HttpSession を使用してユーザー セッションを作成します。したがって、誰かがゲームにログインしたい場合は、HttpSession を介してセッションを設定します。

public void setSessionID(String id) {HttpSession httpSession = getThreadLocalRequest().getSession(true); httpSession.setAttribute("id", id); }

ビューの順序は次のとおりです: LoginView -> HomeView -> LobbyView

ロビーに入ると、websocket 接続を介してチャットに接続されます。問題は、websocketConnection が sessionObject も作成することです。突堤 v-8.1.2.v20120308 でアプリをテストすると、次のようになります。

最初のユーザーがゲームにログインし、チャット機能を使用して直接ロビーに参加し、別のユーザーが同じ方法でロビーに参加すると、お互いにチャットできるので、すべて問題ないように見えます...

しかし、誰かがロビーに参加する前に 2 人のユーザーが同時にゲームにログインし、その後ロビーに参加した場合、ロビーに入った 2 番目のユーザーは、最初に入ったユーザーのすべてのパラメーターを取得するため、両方のユーザーが存在します。同じIDを持つユーザー...何が問題なのかわかりません。最初のユーザーの websocketSession が 2 番目のプレーヤーのログインからの httpSession をオーバーライドしているようです...これが問題になる可能性のある解決策やアイデアに感謝します。

4

1 に答える 1

1

これは、ハンドシェイク後にすべてをクリア/破棄するJettyのバグです。解決策は、その時点でセッションを閉じて、その偽のセッションでリクエストをラップすることです。Atmosphere Framework [1]を使用することもできます。これにより、これが透過的に修正されます(さらに多くの機能があります)。

-ジャンフランソワ

[1] https://github.com/Atmosphere/atmosphere

于 2012-08-29T20:31:34.697 に答える