私はHTML5ゲームサーバーをコーディングしています。サーバーには一致のリストが含まれています。ユーザーが試合の1つに参加すると、ゲームの進捗状況や他のユーザーとのチャットなどを見ることができます。Socket.io:2つのウィンドウを開く認証済みクライアントを扱うにはどうすればよいですか?
ユーザーがサーバーに表示されたそのセッションオブジェクトの 'userid'文字列を取得します。ユーザーID文字列は、ユーザーオブジェクトを参照します。見つからない場合、新しいユーザーオブジェクトが作成され、 'userid'文字列がセッションオブジェクトに追加されます。
これにより、複数のタブ/ウィンドウを使用して複数のゲームに接続でき、同じユーザー名を表示しながら各ウィンドウに画像を表示できます。
問題は、同じユーザーが同じマッチに複数回接続されていることに対応しています。ユーザーが同じゲームに接続された2つのウィンドウを持っている場合、私はそれらに両方のウィンドウでまったく同じことを見てほしい - Facebookのようなもの。私が行うことができるように期待していた何
現在、ユーザーは試合に接続したときに、新しい「コネクション」オブジェクトが作成され、このオブジェクトに私はソケットイベントを処理など
が扱うようにしました同じイベントハンドラ関数を使用する複数のソケットのイベント。私を止める唯一の事は、ソケットイベントに 'owner'引数がないことです。メッセージを受け取るソケットへの参照がないので、メッセージを受信したソケットを除くすべてのソケットにメッセージをブロードキャストすることはできません。
SocketIOルームは、チャンネルで受信したメッセージのイベントがないため、私の要件を満たしていません。
私が代わりにしなければならないのは、各参加者が複数の接続を持つ接続オブジェクトと参加オブジェクトの両方を持つことです。これは私にとって非常に肥大しているように感じます。
別のオプションは、本当に似たような状況になっている誰かからいくつかのアドバイスが必要なスパゲッティコードを使用して記述し、閉鎖など
を活用しようと自分自身を強制することです。
「チャンネルで受信したメッセージにはイベントがありません」とはどういう意味ですか?チャネル上で.send( 'foo')を呼び出すと、 'message'イベントが生成されます(これはチャネル名前空間とデフォルト名前空間の両方で同じように起こります)。そのチャンネルでカスタムイベントが必要な場合は、それらを接続することが不可能であると思われる理由は混乱していますか?正確な要件はあいまいですが、「メッセージを受信したソケットを除くすべてのソケットにメッセージをブロードキャストする」という「ブロードキャスト」方法を検討しましたか? – fourk