将消息发送到Socket.IO 1.0中的特定ID

我想发送数据到一个特定的套接字ID。

我们以前可以在旧版本中做到这一点:

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

我将如何去做在Socket.IO 1.0中类似的东西?

在socket.io 1.0中,你可以用下面的代码来实现:

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

更新:

@MustafaDokumacı的答案包含更好的解决scheme。

在socket.io 1.0中,它提供了一个更好的方法。 每个套接字通过自身id自动join默认房间。 检查文档: http : //socket.io/docs/rooms-and-namespaces/#default-room

所以你可以通过ID发射到一个套接字与以下代码:

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

@MustafaDokumacı和@Curious已经提供了足够的信息,我正在添加如何获取套接字ID。

要获取套接字ID使用socket.id

 var chat = io.of("/socket").on('connection',onSocketConnected); function onSocketConnected(socket){ console.log("connected :"+socket.id); } 

如果你已经使用了一个命名空间,我发现以下工作:

 //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/

我相信@Curious和@MustafaDokumacı都提供了很好的解决scheme。 不同的是,通过@MustafaDokumacı的解决scheme,消息被广播到一个房间,而不仅仅是一个特定的客户端。

当请求确认时,差异是显着的。

 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