在专用“连接”范围之外使用套接字

时间:2014-03-15 10:16:24

标签: node.js socket.io

我正在使用sockets.io制作node.js应用。

我的应用程序的逻辑需要通过各自的套接字与客户端进行通信,但套接字的问题在于他们自己的域名"代码

var io = require('socket.io').listen(80);
io.sockets.on('connection', function (socket) {
  // socket object is only available here
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});

请参阅?

我尝试将此套接字对象导出

var Sockets = []
io.sockets.on('connection', function (socket) {
  Sockets[socket.handshake.user.id] = socket;
});

现在可以在

之外使用了
function myLogic(userid) {
  Sockets[userid].emit('free!')
}

但是我面临着奇怪的错误,因为它可能不应该以这种方式使用...就像新的连接会生成新的socket对象,但之前的对象仍然存在于内存中的某些位置当.on('..'被解雇时仍然会做出反应...

socket范围之外使用io.sockets.on('connection', function(socket){}的正确方法是什么?

2 个答案:

答案 0 :(得分:4)

回答你的问题:如果你想在他们各自的" io.sockets.on('连接',功能(套接字){}范围"之外使用套接字,你必须通过io对象访问它们 - > io.sockets.socket(socketId),其中socketId存储在某处。

答案 1 :(得分:0)

为您的模块创建一个设置函数,并将初始化的套接字传递给它。 IE浏览器。来自 main.js

的类似内容

var server = require('http').createServer(app); var io = require('socket.io').listen(server); var myModule = require('./myModule').setup(io);

然后在 myModule.js 中保存对io对象的引用:

var localIo; exports.setup = function(io) { localIo = io; }; // Then after in your other code.... function myLocalFunction(myData) { localIo.sockets.volatile.emit('myevent', {data: myData}); };