使用socket.io

时间:2016-03-15 18:57:19

标签: javascript node.js sockets socket.io

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。套接字 .emit未定义...

我错了什么?

由于

2 个答案:

答案 0 :(得分:0)

当用户连接时,您似乎用一个套接字覆盖了io变量。将io活动的connection 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()应该向所有套接字发出。

答案 1 :(得分:0)

发生的事情是您在函数

中传递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");
});

这应该会帮助你。