Socket.IO模块C收不到hi事件及多路径分配不同处理模块实现咨询
Socket.IO问题解答
问题1:为什么模块C无法接收hi事件?
原始代码的核心错误是事件绑定的对象错了:
你传入C类构造函数的io.of("/c")是Socket.IO的命名空间(Namespace)实例,该实例仅会触发connection这类命名空间级的连接事件。所有客户端发送的自定义事件(比如hi)都是发送到单个客户端连接的Socket实例上的,你直接给Namespace实例绑定hi事件监听,自然无法收到对应事件。
你后续修改的代码修正了这个问题:在命名空间的connection事件回调中拿到每个新连接的Socket实例,再给这个Socket实例绑定hi事件监听,就能正常接收客户端发送的事件了。
问题2:如何实现不同Socket路径调用不同的模块/类处理?
你修改后的代码已经是标准的实现方案,核心逻辑是由各个业务模块自行维护对应命名空间的连接和事件逻辑,完全解耦:
- 每个业务模块(B、C、D等)的构造函数统一接收Socket.IO根实例和对应路径两个参数
- 模块内部调用
io.of(path)获取对应命名空间,监听connection事件,在回调中拿到单个Socket实例后绑定当前模块对应的所有业务事件 - 服务端初始化时按路径实例化对应模块即可,示例如下:
// 引入所有业务模块 let B = require('./B'); let C = require('./C'); let D = require('./D'); // 按路径绑定对应模块 let b = new B(io, "/b"); let c = new C(io, "/c"); let d = new D(io, "/d");
内容的提问来源于stack exchange,提问作者The KNVB
相关产品推荐
相关产品推荐

