我在节点应用程序中使用Socket.IO,我希望捕获并响应不同文件中的套接字事件,我该怎么做?
我能找到的一个解决方案是在设置socket.io的文件中执行此操作:
var events = [];
module.exports.setup = (server) => {
io = require('socket.io')(server);
console.log("Socket.io setup complete");
io.on('connection', (socket) => {
for(let e of events){
socket.on(e.event, e.callback);
}
});
};
module.exports.on = (event, callback) => {
events.push({event: event, callback: callback});
};
这个工作得很好,唯一的问题是我无法访问套接字对象,因此我不知道哪个套接字发出了事件。
修改
嗯,我想另一种方法是将cb中的套接字作为第一个参数传递,但也许有更好的方法。
答案 0 :(得分:2)
根据您的代码结构的方式以及您希望如何重用或构建模块,有不同的方法来构建事物。以下是一些选择:
将io
传递给每个模块的构造函数,该构造函数想要侦听传入的socket.io事件并让每个想要侦听消息的模块使用io
值来创建自己的io.on('connection', socket => { socket.on('someMsg', localHandler)} );
。
从您的主socket.io模块导出io
,然后让每个想要监听传入消息的模块import/require()
成为主socket.io模块(以获取{{1}然后使用io
值创建自己的io
。
让你的主socket.io模块导出一个函数,用于为传入的socket.io消息注册一个监听器,然后在你的主socket.io模块中只有一个io.on('connection', socket => { socket.on('someMsg', localHandler)} );
处理程序来监听所有的被要求的事件。