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

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

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

【问题讨论】:

    标签: node.js socket.io


    【解决方案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');

        【讨论】:

          猜你喜欢
          • 2015-07-11
          • 2012-05-24
          • 2020-03-12
          • 2016-07-13
          • 2011-06-23
          • 2011-06-06
          • 2019-04-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多