node.js 在 Socket IO 中向特定客户端发送消息
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/35680565/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Sending message to specific client in Socket IO
提问by Datsik
I'm using Socket IO v1.4.5 and have tried 3 different ways below but dont have any result.
我正在使用 Socket IO v1.4.5 并尝试了以下 3 种不同的方法,但没有任何结果。
client.emit('test', 'hahahaha');
io.sockets.socket(id).emit('test',''hahaha);
io.sockets.connected[id].emit('test','hahaha');
Here is my server side
这是我的服务器端
var socket = require( 'socket.io' );
var express = require( 'express' );
var http = require( 'http' );
var dateFormat = require('date-format');
var app = express();
var server = http.createServer( app );
var io = socket.listen( server );
io.sockets.on( 'connection', function( client ) {
user[client.id]=client;
//when we receive message
client.on('message', function( data ) {
console.log( 'Message received from' + data.name + ":" + data.message +' avatar' +data.avatar );
client.emit('test', 'hahahaha');
});
Any help would be great.Thanks for help.Kind Regard
任何帮助都会很棒。感谢您的帮助。亲切的问候
回答by Datsik
To send a message to a specific client you need to do it like so:
要向特定客户端发送消息,您需要这样做:
socket.broadcast.to(socketid).emit('message', 'for your eyes only');
Here is a nice little cheat sheet for sockets:
这是一个不错的套接字小备忘单:
// sending to sender-client only
socket.emit('message', "this is a test");
// sending to all clients, include sender
io.emit('message', "this is a test");
// sending to all clients except sender
socket.broadcast.emit('message', "this is a test");
// sending to all clients in 'game' room(channel) except sender
socket.broadcast.to('game').emit('message', 'nice game');
// sending to all clients in 'game' room(channel), include sender
io.in('game').emit('message', 'cool game');
// sending to sender client, only if they are in 'game' room(channel)
socket.to('game').emit('message', 'enjoy the game');
// sending to all clients in namespace 'myNamespace', include sender
io.of('myNamespace').emit('message', 'gg');
// sending to individual socketid
socket.broadcast.to(socketid).emit('message', 'for your eyes only');
Credit to https://stackoverflow.com/a/10099325
归功于https://stackoverflow.com/a/10099325
The easiest way rather than sending directly to the socket, would be creating a room for the 2 users to use and just send messages freely in there.
最简单的方法不是直接发送到套接字,而是创建一个供 2 个用户使用的房间,然后在那里自由发送消息。
socket.join('some-unique-room-name'); // Do this for both users you want to chat with each other
socket.broadcast.to('the-unique-room-name').emit('message', 'blah'); // Send a message to the chat room.
Otherwise, you're going to need to keep track of each individual clients socket connection, and when you want to chat you'll have to look up that sockets connection and emit specifically to that one using the function I said above. Rooms are probably easier.
否则,您将需要跟踪每个单独的客户端套接字连接,并且当您想聊天时,您必须查找该套接字连接并使用我上面提到的函数专门向该套接字发送。房间可能更容易。
回答by partikles
Socket.io Version 2.0.3+
Socket.io 版本 2.0.3+
Sending a message to a specific socket
向特定套接字发送消息
let namespace = null;
let ns = _io.of(namespace || "/");
let socket = ns.connected[socketId] // assuming you have id of the socket
if (socket) {
console.log("Socket Connected, sent through socket");
socket.emit("chatMessage", data);
} else {
console.log("Socket not connected, sending through push notification");
}
回答by Muhammad Awais
Simply do this
只需这样做
io.socket.in('room').emit("send message to everyone", data);

