发信号通知命名空间内的socket.io房间

时间:2014-01-02 07:58:48

标签: node.js socket.io

我在node.js中为命名空间socket.io房间设置信令时遇到问题。

似乎某些方法在“root”命名空间之外不可用。

app.js:

// I'll skip the server setup
var io = require('socket.io').listen(server); 
var foo = require("./foo")(io.of('/foo'));
io.of('/foo').on('connection', function (socket) {
    try { foo.listen(socket); } catch(err) { console.log(err); }
});

foo.js:

module.exports = function(io){
    var signal = function(data){
        io.sockets.in('12345').emit('bar', data);
    };

    var listen = function(socket){
        socket.join('12345'); // no problem
        signal('test'); // woops!
    };
    return {listen: listen};
};

问题发生在io.sockets.in('12345')。命名空间io没有in方法:

TypeError: Object #<Object> has no method 'in'

有没有办法在不使用socket.broadcast的情况下广播到命名空间?

1 个答案:

答案 0 :(得分:0)

想出来。

因为作为io参数传递给module.exports的{​​{1}}的变量已经是命名空间(它接收foo.js),所以不需要io.of('/foo')sockets中的1}}。 io.sockets.in本身就是套接字对象。

换句话说,我只会使用:

io

......而且效果很好。