【问题标题】:Problems with emitting to all clients with socket.io使用 socket.io 向所有客户端发送的问题
【发布时间】:2016-03-16 04:09:52
【问题描述】:
var io = require('socket.io').listen(server1);
io.on('connection', function(io){
    socket_call_data = function(some,data){
        io.emit("new_peer_data", result);
    }

    io.on('event', function(data){
      //doing stuff
      socket_call_data(some,data);
    });
});

这是我当前的代码,问题是io.emit(在函数 socket_call_data 中)似乎只发送给连接的用户。所以,在做了一些阅读之后,我使用了io.broadcast.emit。这很好用,但它不包括连接的用户——我也想向他们发送数据。所以,最后我来了解io.sockets.emit,据说它会将它发送给所有客户。但相反,我得到了错误:

Missing error handler on `socket`.
TypeError: Cannot call method 'emit' of undefined
    at socket_call_data (/var/www/html/live_nodejs/handle.js:47:20)

所以 io.sockets.emit 没有定义...

我做错了什么?

谢谢

【问题讨论】:

    标签: javascript node.js sockets socket.io


    【解决方案1】:

    当用户连接时,您似乎正在使用单个套接字覆盖您的 io 变量。将 connection 事件中的 io arg 改为 socket

    var io = require('socket.io').listen(server1);
    io.on('connection', function(socket){
        socket_call_data = function(some,data){
            io.emit("new_peer_data", result);
        }
    
        socket.on('event', function(data){
          //doing stuff
          socket_call_data(some,data);
        });
    });
    

    然后io.emit() 应该发射到所有套接字。

    【讨论】:

      【解决方案2】:

      发生的事情是你在函数中传递了io

      io.on('connection', function(io){
           //Your Code here
      });
      

      因此,您在函数内部传递的全局 ioio 变得模棱两可。您需要做的就是将您在函数内部传递的io 更改为其他变量,例如socket 或其他变量。

      io.on('connection', function(socket){
           //Your code here
           socket.emit("some event specific to this particular socket");
           io.sockets.emit("This event will be broadcasted to everyone connected");
      });
      

      这应该可以帮助你。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-04
        • 2016-10-19
        • 2017-08-17
        • 1970-01-01
        • 1970-01-01
        • 2022-11-15
        • 2014-08-17
        • 1970-01-01
        相关资源
        最近更新 更多