套接字.IO中间件函数

Socket.io middlewhere functions

本文关键字:函数 中间件 IO 套接字      更新时间:2023-09-26

我正在尝试在套接字中分离逻辑。IO服务器,但我遇到了一些问题。

说,例如我有以下内容:

    io.on('connection', function (socket) {
    var fileModule = require('./costum_modules/FileModule.js')(io);
    app.use(fileModule);
});

现在在fileModule中,我有以下代码:

    var fileModule = function (socket) {
    socket.on('userData', function(msg){
        var i = 0;
    });

}
module.exports = new fileModule();

很遗憾socket没有定义。

我的问题是我可以这样做吗?或者不可能将单例传递给另一个文件并使其从同一对象读取?

您可以使用其他文件来分解您的逻辑,但是您的代码存在几个问题。

首先,我认为hackto是正确的,你不想做new fileModule(),只是:

module.exports = fileModule;

第二,当调用require时,您正在传递全局socketIO对象(io)。您应该将在连接处理程序中获得的socket传递给它。例如

require('./costum_modules/FileModule.js')(socket);

我认为这将工作,移动一些你的窝。IO消息处理代码变成一个模块。现在您的套接字将响应来自客户端的userData消息。然而,除非你有一些自定义的应用程序,我不认为app.use会做你所期望的。你不能把web套接字处理程序钩到Express/retify/Connect/任何中间件链中。但是你可以编写一个中间件,向套接字服务器发送消息。

如果你只是想在你的应用程序和套接字服务器之间共享会话,试试这个SO答案。