Socket.IO1.0の特定のIDにメッセージを送信する


85

1つの特定のソケットIDにデータを送信したい。

以前のバージョンではこれを行うことができました。

io.sockets.socket(socketid).emit('message', 'for your eyes only');

Socket.IO 1.0で同様のことを行うにはどうすればよいですか?

回答:


206

socket.io 1.0では、これにより良い方法が提供されます。各ソケットは、自己IDによってデフォルトの部屋に自動的に参加します。ドキュメントを確認してください:http//socket.io/docs/rooms-and-namespaces/#default-room

したがって、次のコードを使用してIDでソケットに送信できます。

io.to(socketid).emit('message', 'for your eyes only');

to(room_id)と(user_socket_id)には違いがありますか?私は実際にそれを使用して、1人以上のユーザーがいる可能性のある部屋にメッセージを送信します。「これにより、他のソケットへのメッセージのブロードキャストが簡単になります:」の場合、一意のプライベートソケットではなく、1つ以上にすることができます。
ワシントンボテリョ2014

@WashingtonBotelho、ソケットIDは通常「Uj5CRqZ5b_Xubx9sAAAA」のように見えるため、理論的にはそのような部屋に複数のユーザーがいる可能性がありますが、実際には、他のユーザーの個人用部屋にユーザーを追加する場合はわかりません。
オレグ

9
どうすればsocketIdで特定のユーザーを識別できますか?これは、user(たとえば-username)とsocketIdのキーと値のペアをどこかに保存する必要があることを意味しますか?
サイ

@MustafaDokumacıのMERHABA、BANA BIR yardimらstackoverflow.com/questions/38817680/...
マハディpishguy

それはとても非論理的です...なぜソケットID番号にメッセージを送信する方法を私たちに提供しないのですか?それだけですか?とにかく賛成票を投じて、実際に2.xで機能する唯一の回避

94

socket.io 1.0では、次のコードでこれを行うことができます。

if (io.sockets.connected[socketid]) {
    io.sockets.connected[socketid].emit('message', 'for your eyes only');
}

更新:

@MustafaDokumacıの答えには、より良い解決策が含まれています。


3
この答えと指摘されたより良い答えの違いは、このソリューションを使用すると、素晴らしいコールバックを持つことができるということです。ただし、io.to(socketid)では、コールバックを使用できません。
ラマザンポラット2016年

17

@MustafaDokumacıと@Curiousはすでに十分な情報を提供しており、ソケットIDを取得する方法を追加しています。

ソケットIDを取得するには、socket.idを使用します

var chat = io.of("/socket").on('connection',onSocketConnected);

function onSocketConnected(socket){
   console.log("connected :"+socket.id);  
}

6

名前空間を使用したことがある場合、次のことが機能することがわかりました。

//Defining the namespace <br>
var nsp = io.of('/my-namespace');

//targeting the message to socket id <br>
nsp.to(socket id of the intended recipient).emit('private message', 'hello');

名前空間の詳細:http//socket.io/docs/rooms-and-namespaces/


5

@Curiousと@MustafaDokumacıの両方がうまく機能するソリューションを提供したと思います。ただし、@MustafaDokumacıのソリューションでは、メッセージが特定のクライアントだけでなく部屋にもブロードキャストされるという違いがあります。

確認が要求された場合、違いは顕著です。

io.sockets.connected[socketid].emit('message', 'for your eyes only', function(data) {...});

期待どおりに動作しますが

io.to(socketid).emit('message', 'for your eyes only', function(data) {...});

で失敗する

Error: Callbacks are not supported when broadcasting

1

Node.js-> socket.io->ダウンロードするチャットの例がありますこれを行に貼り付けます(接続時にio)部分..私は100%動作するこのコードを使用します

io.on('connection', function(socket){
  socket.on('chat message', function(msg){
    console.log(socket.id);
    io.to(socket.id).emit('chat message', msg+' you ID is:'+socket.id);
  });
});
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.