SocketIO:在单独的服务中同时访问io和套接字实例

时间:2020-04-11 18:42:09

标签: node.js express socket.io

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

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

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

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

1 个答案:

答案 0 :(得分:1)

您的代码忽略了传递到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
     });
 });