我想在我的应用程序中创建一个 socket.IO 对象,并且我想在我的应用程序中的任何地方都可以访问它,而不使用 GLOBALS 或 hacks,并且还要确保始终只加载一个实例。
经过一番思考,我想出了这个模块
var io = null;
// This module is a siglenton. It initializes itself
// the first time require() calls it and all the
// next times it simply returns the object that was
// initally created
module.exports = function(server){
// If io is not initialized, initialize it before returning
if(!io)
{
io = require('socket.io').listen(server);
io.sockets.on('connection', function (socket) {
socket.on('message', function (data) {
//Do stuff
});
});
}
return io;
}
它在理论上似乎运作良好,但在实践中它每次都会不断生成新对象
var http_server = http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
var a = require('my_io')(http_server);
var b = require('my_io')();
console.log(a === b); //Echoes false
我在这里错过了什么吗?我该怎么做?