Javascript 正在从红色节点中的express server实例中分离socket.io

Javascript 正在从红色节点中的express server实例中分离socket.io,javascript,node.js,express,socket.io,node-red,Javascript,Node.js,Express,Socket.io,Node Red,在我的项目中,我想将socket.io服务器连接到已经存在的端口,在我的例子中,节点RED在1880提供其文件。这就是为什么我使用: const server = RED.server; const socket = require("socket.io"); const io = socket(server,{}); RED是一个包含节点RED实例所有信息的对象(?),因此我将socket.io附加到已使用的端口。 如果您不知道Node RED是如何工作的:基本思想是,当

在我的项目中,我想将socket.io服务器连接到已经存在的端口,在我的例子中,节点RED在1880提供其文件。这就是为什么我使用:

const server = RED.server;
const socket = require("socket.io");
const io = socket(server,{});
RED
是一个包含节点RED实例所有信息的对象(?),因此我将socket.io附加到已使用的端口。 如果您不知道Node RED是如何工作的:基本思想是,当您点击“部署”时,您会对流应用更改,但Node.js进程不会重置/重新启动,这就是为什么我必须清除Node listener中的所有内容:

node.on("close", () => {});
还有一个问题,在每次“部署”时,所有代码都会再次执行,因此我必须清除我的socket.io实例,在另一种情况下,我在尝试连接到socket时会得到这个execption,但它只有在点击“部署”后才会抛出这个异常(可能是因为
const io=socket(server,{});
第二次连接到同一服务器)

但是,当我关闭socket.io服务器时

io.close()
端口为1880的主服务器也将关闭。这就是node.js(node RED)进程仍在运行的原因,但我无法再访问
localhost:1880
。 我发现的第一个解决方案是将socket.io移动到另一个端口,但这并不理想,因为我必须在路由器上转发这个端口,我觉得1880端口上的socket会更“干净”。 这就是为什么我问是否可以执行类似于
io.detach()
的操作,或者如何处理我的执行

io.close()