我正在使用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){}
的正确方法是什么?
答案 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});
};