Node.js 在nodejs中封装socket.io实例

Node.js 在nodejs中封装socket.io实例,node.js,module,socket.io,Node.js,Module,Socket.io,我正在尝试将socket.io实例封装到模块中。我这样做了,但看起来有点混乱,因为我必须为来自express/passport的套接字传输的身份验证注入一些依赖项 我的问题是我想访问模块外部的套接字实例,比如socket.onnewDevice,function data{} 通过连接事件获得的套接字实例位于函数内部,它甚至可能在创建时不存在,因为没有建立连接。在我看来,这简直是一种错误。我不想注入越来越多的依赖性,因为我需要它们在函数范围内 我想在'connection'上做sio.on,fu

我正在尝试将socket.io实例封装到模块中。我这样做了,但看起来有点混乱,因为我必须为来自express/passport的套接字传输的身份验证注入一些依赖项

我的问题是我想访问模块外部的套接字实例,比如socket.onnewDevice,function data{}

通过连接事件获得的套接字实例位于函数内部,它甚至可能在创建时不存在,因为没有建立连接。在我看来,这简直是一种错误。我不想注入越来越多的依赖性,因为我需要它们在函数范围内

我想在'connection'上做sio.on,functionsocket{};在模块外部。也许我可以做两次,先在模块内部,然后在模块外部,但我想我会创建两个侦听器

有没有什么好的实践或模式来正确地做到这一点

var io = require('socket.io');

var socket = function (server, sessionStore, cookieParser, authentication)  {

    var sio = io.listen(server);

    // Configure socket.io
    sio.configure(function () {

        // Authorize the socket.io request
        sio.set('authorization', function (data, accept) {
                    // Authorization is done here
        });

    });

    sio.on('connection', function(socket) {

    var lastActionTime = new Date();

    // Get the userId from the session
    var session   = socket.handshake.session;
    var userId    = session.passport.user;
    var sessionID = socket.handshake.sessionID;

    var userdata = null;

    // Deserialize user by the userId
    authentication.deserializeUser(userId, function(err, user) {
              // get the userdata
    });


    socket.on('disconnect', function() {

    });

    socket.on('brightnessChange', function(data) {
        // TODO Do something here device control

        // Broadcast to other devices
        this.broadcast.emit('brightnessChange', data);
    });

}); 


    return sio;
};

module.exports = socket;

我会建议,在下面,灵活性和规模以及。我尝试了两种方法,结果使用了多个连接事件

我想在'connection'上做sio.on,functionsocket{};在模块外部。也许我可以做两次,先在模块内部,然后在模块外部,但我会创建 我猜是两个听众