我在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
的情况下广播到命名空间?
答案 0 :(得分:0)
想出来。
因为作为io
参数传递给module.exports
的{{1}}的变量已经是命名空间(它接收foo.js
),所以不需要io.of('/foo')
在sockets
中的1}}。 io.sockets.in
本身就是套接字对象。
换句话说,我只会使用:
io
......而且效果很好。