アプリで socket.IO オブジェクトを作成し、GLOBALS やハックを使用せずにアプリケーションのどこからでもアクセスできるようにし、常に 1 つのインスタンスのみが読み込まれるようにしたいと考えています。
少し考えた後、私はこのモジュールを思いつきました
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
ここで何か不足していますか?どうすればいいですか?