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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Socket.IO 1.0中将消息发送到特定ID相关的知识,希望对你有一定的参考价值。

我想将数据发送到一个特定的套接字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ı的答案包含更好的解决方案。

另一答案

@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ı都提供了运行良好的解决方案。不同之处在于,使用@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 on connection)部分..我使用这个代码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);
  });
});

以上是关于在Socket.IO 1.0中将消息发送到特定ID的主要内容,如果未能解决你的问题,请参考以下文章

使用 socket.io 向特定客户端发送消息,同时套接字 id 快速变化

通过 Socket.IO 1.0 发送到具有 socketId 的特定客户端

向特定的套接字 id 发送私人消息

如何在socket.io中向特定用户发送消息?

使用Socket.io将消息发送到多个房间?

使用 socket.io 和空消息队列向特定客户端发送消息