1つの特定のソケットIDにデータを送信したい。
以前のバージョンではこれを行うことができました。
io.sockets.socket(socketid).emit('message', 'for your eyes only');
Socket.IO 1.0で同様のことを行うにはどうすればよいですか?
1つの特定のソケットIDにデータを送信したい。
以前のバージョンではこれを行うことができました。
io.sockets.socket(socketid).emit('message', 'for your eyes only');
Socket.IO 1.0で同様のことを行うにはどうすればよいですか?
回答:
socket.io 1.0では、これにより良い方法が提供されます。各ソケットは、自己IDによってデフォルトの部屋に自動的に参加します。ドキュメントを確認してください:http://socket.io/docs/rooms-and-namespaces/#default-room
したがって、次のコードを使用してIDでソケットに送信できます。
io.to(socketid).emit('message', 'for your eyes only');
socket.io 1.0では、次のコードでこれを行うことができます。
if (io.sockets.connected[socketid]) {
io.sockets.connected[socketid].emit('message', 'for your eyes only');
}
更新:
@MustafaDokumacıの答えには、より良い解決策が含まれています。
名前空間を使用したことがある場合、次のことが機能することがわかりました。
//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');
@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
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);
});
});