Socket.io中间件

时间:2019-06-22 17:24:47

标签: node.js socket.io

我想知道如何在我的app.js页面之外使用socket.io。

之后,我目前在app.js页面上拥有了所有与套接字相关的代码。
const express = require('express');
const app = express();
const socketio = require('socket.io
const expressServer = app.listen(9999);
const io = socketio(expressServer);

我可以在其中使用io.xxx,但我想做的是初始化socket.io,然后将所有相关代码放入单独的文件中,然后我可以将函数公开给调用emit等。

1 个答案:

答案 0 :(得分:2)

您可以将socket.io代码放入其自己的模块中,并使用导出来初始化和共享实例。

sio.js

const socketio = require('socket.io');
let io;

module.exports = {
   init: function(server) {
        if (io) {
            throw new Error("socket.io already initialized");
        }
        // initalize socket.io to this server
        io = socketio(server);

        // put other socket.io initialization code here

        return io;
   }
   get: function() {
        if (!io) {
             throw new Error("socket.io has not yet been initialized");
        }
        return io;
   }
}

app.js

const express = require('express');
const app = express();
const expressServer = app.listen(9999);
const io = require('sio').init(expressServer);

一些其他想要访问socket.io实例的模块文件

const io = require('sio').get();

这允许每个进程将一个socket.io实例绑定到一台服务器(因为io实例存储在模块数据中)。它可以扩展为支持多台服务器的多个实例,但是当您请求实例时,您必须说出想要实例的服务器。

还请注意,必须先调用.init()方法,然后才能调用.get(),这样就应该加载sio模块,并在应用程序模块的安装过程中尽早调用.init()加载其他本身可能要加载sio的东西。