javascript - Socket IO发送到指定的用户ID

标签 javascript node.js socket.io send broadcast

我想将数据发送给指定的用户,而不是其他人。

目前要向我做的每个人广播:

socket.on('newChatMessage', function (message) {
socket.broadcast.emit('newChatMessage_response', { data: message});
});

现在我想做的就是:

socket.on('newChatMessage', function (message) {
socket.to(5).send('newChatMessage_response', { data: message});
});

to(5) 将是 ID 为 5 的用户。

最佳答案

我认为您缺少的部分在这个函数中:io.sockets.on('connection', function(socket) { ... });- 那个函数每次都执行是一个连接事件。每次触发该事件时,“套接字”参数都会引用一个全新的套接字对象,代表新连接的用户。然后,您需要将该套接字对象存储在某个地方,以便您稍后可以查找它,如果您需要发送只能由该套接字看到的消息,则可以调用它的 send 或 emit 方法。

这是一个可以帮助您入门的简单示例。 (注意:我没有测试过这个,我也不建议这是做你想做的事情的最好方法。我只是把它写在答案编辑器中给你一个想法你如何可以做你想做的事)

var allSockets = [];
io.sockets.on('connection', function(socket) {
  var userId = allSockets.push(socket);
  socket.on('newChatMessage', function(message) {
    socket.broadcast.emit('newChatMessage_response', {data: message});
  });
  socket.on('privateChatMessage', function(message, toId) {
    allSockets[toId-1].emit('newPrivateMessage_response', {data: message});
  });
  socket.broadcast.emit('newUserArrival', 'New user arrived with id of: ' + userId);
});

编辑:如果您通过 id 指的是 socket.io 分配的 id 值,而不是您分配的值,您可以使用 var socket = io 获取具有特定 id 值的套接字。 sockets.sockets['1981672396123987'];(以上语法使用 socket.io v0.7.9 测试)

关于javascript - Socket IO发送到指定的用户ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9137877/

相关文章:

javascript - 为什么 Typescript 在转译代码中将 .default() 添加到类构造函数中?

node.js - 在 Sequelize 中使用三个表进行内部连接

node.js - 如何解决点对点网络中的客户端注册问题?

node.js - socket.ionodejs : use database to store all sockets clients?

javascript - 尝试将姓名添加到列表并发送到 HTML

javascript - 对象过滤某些值

javascript - 在多种情况下从 javascript 中的字符串中删除子字符串

javascript - 将返回结果导出到另一个文件

javascript - jQuery 响应式图像映射 : Uncaught TypeError

node.js - Flutter socket io没有连接到 Node js socket io服务器