【问题标题】:Socket.io rooms is sending to everybody, not just single roomSocket.io 房间发送给每个人,而不仅仅是单人房间
【发布时间】:2017-05-23 18:30:22
【问题描述】:

我不知道为什么这不起作用;这是我的代码:

      io.on('connection', function(socket) {
        socket.on('join', function(data) {
          socket.join(data.email); // We are using room of socket io
            User.findById(bid.highestBidder, (err, theUser) => {
              io.sockets.in(theUser.email).emit('outbid', {msg: 'You have been outbid!'});
            });
        });
      });

现在,这是客户端 javascript 上的代码:

<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io();

  var userEmail = $("#userEmail").val();

  socket.emit('join', {
    email: userEmail
  });

  socket.on("outbid", function(data) {
        console.log(data);
      });
</script>

如果您需要我粘贴更多代码,请告诉我,我会的。

基本上,当套接字函数被执行时,它会将其发送到每个浏览器,而不仅仅是带有“电子邮件”的房间。

【问题讨论】:

  • theUser.email 有效吗?此外,socket.join() 可能是异步的,因此您可能必须等待(使用回调)才能真正加入房间。
  • ^ “最高出价者”是否可以为空,因此在您对 io.sockets.in(null).emit() 的调用中不会返回电子邮件并发送没有参数的情况
  • @Ken,尝试访问null 中的email 字段会引发错误。当然,我假设 OP 会告诉我们这个错误。
  • @hlfrmn 好的,那么也许用户没有与其记录关联的电子邮件地址,导致我最初提出的问题相同。 (主要内容是,检查所有值是否正确返回)
  • @Ken,我也是这么想的,但希望 OP 会检查一下。我通常会在我的头撞墙一个小时后检查我的逻辑中是否存在简单的明显错误。 StackOverflow 大约需要 5 个小时 :)

标签: javascript node.js socket.io handlebars.js


【解决方案1】:
io.on('connection', function(socket){
  socket.join('room name');
});

io.to('room name').emit('some event');

【讨论】:

  • 我会尽快尝试,如果有效,我会告诉你!
猜你喜欢
  • 2019-06-25
  • 2017-12-23
  • 2015-03-20
  • 2011-11-18
  • 1970-01-01
  • 2021-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多