私はあなたの問題を理解していません。同じソケットに接続されている異なるユーザーを区別する必要がある場合は、「部屋」の概念を使用できます。異なるエンドポイントを提供する必要がある場合は、名前空間を使用できます。
私は、ドキュメントから、ここでの例を総括ます:
部屋
あなたが与えられたチャネルにソケットを購読する参加呼び出すことができます。
io.on('connection', function(socket){
socket.join('some room'); // At user login maybe you can decide if
// the user should join the customer or suppliers
// room, or both if you need to
});
そして単に使用または(同じです):
io.to('some room').emit('some event');
チャンネルから離脱する場合は、参加と同じ方法で離脱します。
各ネームスペース内で、ソケットが参加したり離れることができる任意のチャネルを定義することもできます。各接続はデフォルトのチャンネルに参加し、ブロードキャストに便利です。一度切断すると、socketIdは彼が参加した部屋を自動的に残します。
io.on('connection', function(socket){
socket.on('say to someone', function(id, msg){
// Useful to broadcast to every connected socket
socket.broadcast.to(id).emit('my message', msg);
});
});
名前空間
基本的に我々は異なるエンドポイントを定義することができ、デフォルト一つは '/' です。
サーバー側
、あなたのアプリケーションに到達することができ、多くのnamepaces(エンドポイント)を定義することができ、サーバを起動します。それらのすべては、あなたが宣言された名前空間に接続する必要があり、さまざまなイベントを持っていると、クライアント側では
var nsp = io.of('/my-namespace');
nsp.on('connection', function(socket){
console.log('someone connected');
});
nsp.emit('hi', 'everyone!');
クライアント側
をビヘイビアも
var socket = io('/my-namespace');
https://socket.io/docs/rooms-and-namespaces/
すべてが1対1のデータ転送です。しかし、私はさまざまなタイプのユーザーのソケットイベントを検証する必要があります。ユーザーのタイプに基づいて私はロジックを持っています。私はイベント内でユーザータイプを簡単にチェックしたくない。 –
特定のユーザー(他の名前空間ユーザー)にイベントを送信したい場合は、名前空間を使用します。どのようにできるのか ? io.to(conId).emit( 'someEvent'、data)?名前空間を定義する必要はありますか? –
私は、その場合はおそらく部屋を選ぶでしょう。ユーザーがログインすると、顧客またはサプライヤルームに参加する必要があります。その後、彼は汎用イベントをソケットに送信し、顧客固有のイベントは顧客ルームに送信します。サプライヤにとっても同じことです。しかし、参加する部屋を決定するためにユーザータイプを確認する必要があります。 – sabau