私は、ユーザーに固有のメッセージをプッシュしたいが、開かれている各タブとそのメッセージのみに行く可能性があるパーソナルWebアプリケーションを開発しています1つのタブ。特定のユーザーのすべてのオープンソケットにメッセージを送信する
私が行ったことは、各ソケットオブジェクトに一意の識別子を付けることです。特定のユーザーにメッセージを送信できますが、最後に開いたタブにのみ移動します。ソケットが両方のタブを参照していることがわかります。私が見るものから
{ id: '6121808001146368876',
namespace:
{ manager:
{ server: [Object],
namespaces: [Object],
sockets: [Circular],
_events: [Object],
settings: [Object],
handshaken: [Object],
connected: [Object],
open: [Object],
closed: {},
rooms: [Object],
roomClients: [Object],
oldListeners: [Object],
flashPolicyServer: [Object],
gc: [Object] },
name: '',
sockets:
{ '8072595141256968141': [Object],
'6121808001146368876': [Circular] },
auth: false,
flags: { endpoint: '', exceptions: [] },
_events: { connection: [Function] } }
下記参照、私はnamespace.sockets下の参照を持っていますが、私が述べたように、これまでの円形1がメッセージを取得するだけです。
どうすれば特定のソケットにフィルタをかけることができますか、それとも名前空間を作成して行う必要がありますか?
また、単なるオブジェクトであり、円形のソケットの重要性は何ですか?私が見ることができるものから、メインのIDは円形のものと同じであり、円形のものは最後のものです。
「循環型」とは、何らかの形で自己参照型であることを意味します。あなたのケースでは、idが一致するので、私はそれを 'yourObj.namespace.sockets.6121808001146368876 === yourObj'と推測しています。あなたの問題に関しては、socket.ioのチャンネルを活用し、各ユーザーに自分のチャンネルを持たせることをお勧めします。そうすれば、自分でジャグリングするソケットを管理する必要はなく、代わりに 'sockets.of(userChannel).emit(...)'を使うことができます。 –