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


85

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

我们以前可以在旧版本中执行此操作:

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

我将如何在Socket.IO 1.0中执行类似的操作?

Answers:


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');

(room_id)和(user_socket_id)之间有区别吗?我实际上使用它来将消息发送到可以有一个或多个用户的房间。“这样可以轻松地将消息广播到其他套接字:”,然后可以是一个或多个,而不是唯一的私有套接字。
华盛顿Botelho 2014年

@WashingtonBotelho,套接字ID通常看起来像“ Uj5CRqZ5b_Xubx9sAAAA”,因此,从理论上讲,这样的房间中可能有多个用户,但是实际上我不知道将用户添加到其他用户的个人房间中的情况。
2014年

9
我们如何通过他们的socketId来识别特定用户,这是否意味着我们需要在某个地方存储用户(例如,用户名)和socketId的键值对?
2015年

@MustafaDokumacımerhaba,智井yardim等stackoverflow.com/questions/38817680/...
马赫迪pishguy

太不合逻辑了...为什么不仅仅提供一种向套接字ID号发送消息的方法,仅此而已?无论如何,唯一可以在2.x上正常运行的解决方法
Adry

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),您不能使用回调。
拉马赞(Ramazan Polat)

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)。

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);
  });
});
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.