我构建了一个简单的node.js/socket.io应用程序。 我需要一个模块来发出事件,该模块可以通过其他模块访问,这样我就可以在有新的数据库条目时发送套接字消息。
类似这样的:
function sendWebsocketEvent (whereToSend, EventName, Payload) {
io.in(whereToSend).emit(EventName, Payload)
}
我该如何处理?
我已经尝试过了:
--app.js--
// Websockets
var http = require('http').createServer(app)
var io = require('socket.io')(http)
http.listen(3000, function () {
console.log('listening on Port *:3000')
})
require('./WebSockets/socketInit')(io)
--socketInit.js--
module.exports = (ioInput) => {
const io = ioInput
return io
}
-- sendSockets.js --
const io = require('./socketInit')
module.exports = {
sendWebsocketEvent (whereToSend, EventName, Payload) {
io.in(whereToSend).emit(EventName, Payload)
}
}
我尝试在另一个模块调用这个函数:
const sendSockets = require('../WebSockets/sendSockets')
.
.
.
sendSockets.sendWebsocketEvent('user', 'databaseUpdate', 'dataToSend')
.
.
.
但这行不通。
还有其他方法可以完成这个任务吗?
- 克里斯
最佳答案
Server.js 内部
const express = require('express');
const app = express();
const server = require('http').createServer(app)
const io = socket.listen(server);
global.io = io;
const port = process.env.PORT || 5500;
server.listen(port, () => console.log(`%s 🚀 Server is listening on port ${port}`, chalk.green('✓')));
// socket io connection
let interval;
io.on("connection", socket => {
console.log("New client connected");
if (interval) {
clearInterval(interval);
}
});
然后像这样在你想要的地方发射
global.io.emit('EventName', data);
关于javascript - Socket.io 全局发送函数 - Node.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59921266/