首页 > 解决方案 > SocketIO:在单独的服务中访问 io 和 socket 实例

问题描述

我已经在快速服务器中实现了 socket.io。一切正常,但我想避免在我的主文件中有一个长的套接字脚本。因此,我创建了一个单独的服务来处理另一个文件中的套接字逻辑:

主.js: io.on("connect", SocketManager(io))

socketManager.js: const SocketManager = (io) => {io.on("connect", ()=> do stuff}

但是这样做时,我只能使用 io 实例。套接字未定义,这很不幸,因为我必须访问它才能完成特定任务。可悲的是,我不能只将套接字作为第二个参数传递给 SocketManager。如何解决这个问题?

标签: node.jsexpresssocket.io

解决方案


您的代码忽略了socket传递给connect事件的那个,因此您错过了使用实际新创建的套接字的机会。

要修复,请更改此:

 io.on("connect", SocketManager(io))

对此:

 SocketManager(io)

您要做的就是初始化您的套接字管理器并将io实例传递给它并让它监听connect事件本身。

然后,在您的SocketManager代码中,您要注意socket传递给connect事件的参数。所以,改变这个:

 const SocketManager = (io) => {io.on("connect", ()=> do stuff}

对此:

 const SocketManager = (io) => {
     io.on("connect", (socket) => { 
         // do stuff using newly connected socket in here
     });
 });

推荐阅读