我想知道如何在我的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等。
答案 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的东西。