node.js socket.io 如何发射到特定的客户端?

Posted

技术标签:

【中文标题】node.js socket.io 如何发射到特定的客户端?【英文标题】:node.js socket.io How to emit to a particular client? 【发布时间】:2012-04-24 00:31:44 【问题描述】:

我想向特定客户端“发送”一条消息,该消息是根据在不同客户端收到的另一条消息选择的,我该怎么做?

我正在考虑将每个客户加入他们自己的“房间”,然后进行广播。有没有更好的办法?

【问题讨论】:

【参考方案1】:

socket.io 1.0 及以上版本更新

io.to(socketid).emit('message', 'whatever');

对于旧版本:

您可以将每个客户端作为属性存储在对象中。然后就可以根据消息查找socket了:

var basket = ;

io.sockets.on('connection', function (socket) 
  socket.on("register", function(data) 
    basket[data.nickname] = socket.id;
  );
  socket.on("privmessage", function(data)
    var to = basket[data.to];
    io.sockets.socket(to).emit(data.msg);
  );
);

未经测试...但它应该给你一个想法

【讨论】:

它如何与reddiss一起工作?我想在分布式负载平衡环境中做同样的事情。 对于 1.0 版本,我们需要使用 io.to(socketId).emit('pm', );就像@Minho Lee 说的那样 @budsiya 你有没有让它工作?我正在解决一个类似的问题,我在单个服务器上运行多个节点进程。 @budsiya,你的意思是redis @Francesco 这很好,但您应该扩展示例,以帮助初学者掌握概念。或者提供一些链接【参考方案2】:

对于 socket.io 1.0 版使用:

io.to(socketid).emit('message', 'whatever');

【讨论】:

【参考方案3】:

使用 socketID 发送给特定的客户端。

服务器/包:socket.io:

io.to(socketID).emit('testEvent', 'yourMessage');

客户端/包socket.io-client:

io.sockets.on('connection',(socket) => 
  socket.on("testEvent", data => 
    console.log(data);
  );
);

您可以通过以下方式访问socketID:

io.on('connection', (socket, next) => 
    const ID = socket.id // id property on the socket Object
)

它只是socket 对象上的一个属性

【讨论】:

【参考方案4】:

对于socket.io v1.0

io.to(socketID).emit('testEvent', 'yourMessage');

【讨论】:

以上是关于node.js socket.io 如何发射到特定的客户端?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 socket.io-redis 发送私人消息(发射)

Socket.io 聊天应用程序显示检测到 EventEmitter 内存泄漏。增加了 11 位听众。使用发射器.setMaxListeners()

尝试发出时,带有 Node.js 的 Socket.io 在路由文件中返回未定义

当存储在变量中时,Socket.io 发射到 socket.id 不起作用

我可以通过socket.emit发送多少数据?

如果使用 Node.js 在 Socket.io 中的应用程序中登录功能,则为特定用户发出事件