node.js - 如何将 socket.io 连接导出到另一个控制器
问题描述
我陷入了一个问题。
我正在工作的 bin 文件中建立 Socket.IO 连接,但谁能告诉我如何将此连接导出到不同的控制器。这是我的 bin 文件代码。
var app = require('../app');
var debug = require('debug')('userservice:server');
var http = require('http');
/**
* Get port from environment and store in Express.
*/
var port = normalizePort(process.env.PORT || '3015');
app.set('port', port);
/**
* Create HTTP server.
*/
var server = http.createServer(app);
var io = require('socket.io')(server);
io.on('connection', (socket) => {
console.log('Connection made #######################################################.', socket.id);
socket.on('disconnect', () => {
console.log('Connection disconnected @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.', socket.id);
});
});
/**
* Listen on provided port, on all network interfaces.
*/
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
解决方案
有很多技术可以用来重用套接字实例,一个简单而简单的方法是创建一个单一的类,以便能够:
- 启动套接字实例
- 将实例导出到其他模块
socket.js:
let io;
module.exports = {
init: (server) => {
io = require('socket.io').listen(server); io.origins('*:*');
return io;
},
get: () => {
if (!io) {
throw new Error("socket is not initialized");
}
return io;
}
};
server.js:
const app = require('../app');
const http = require('http');
/**
* Get port from environment and store in Express.
*/
const port = '3015';
app.set('port', port);
/**
* Create HTTP server.
*/
const server = http.createServer(app);
const io = require('./socket.js').init(server);
io.on('connection', (socket) => {
console.log('Connection success', socket.id);
socket.on('disconnect', () => {
console.log('Connection disconnected', socket.id);
});
}
现在您可以在其他模块中使用它。
const io = require('./socket.js').get();
推荐阅读
- javascript - 我怎样才能先隐藏输入字段和它的标签,然后它会在我单击按钮时显示
- javascript - Select2 下拉菜单在 Bootstrap 弹出窗口中无法正常工作
- javascript - 使用文本框和按钮动态克隆 div
- java - Android - 第一个动画出现的行为不同
- javascript - Vue-Material 不加载字体
- reactjs - 使用 Enzyme 进行测试时如何在渲染道具中渲染元素
- angular - 如何在 Angular 反应式表单中注册或添加非自动验证的控件?
- python - 有没有办法对两个节点类型的类进行异或(其中一个可以是无)
- c# - 如何在c#中延迟某些东西
- google-api - 如何防止不必要的 G Suite API 数据消耗?