Node.js socket.io根据客户端传递的id向客户端发送数据

Node.js socket.io根据客户端传递的id向客户端发送数据,node.js,architecture,express,socket.io,Node.js,Architecture,Express,Socket.io,假设我有一个rest端点,当调用它时,它会启动一个长时间运行的进程服务器端,例如 http://host/api/program/start 我希望将该进程的任何更新/输出从服务器端推送到客户端 我认为rest调用将返回某种唯一的id,客户端在连接到websocket时可以使用该id只接收关于特定进程的更新 如果在进程的第一个输出之前没有连接到客户端,我必须考虑缓冲进程的输出/更新以发送到客户端,但不管怎样,实现套接字数据处理的最佳方法是什么?我可以以某种方式使用socket.io文件室/名称

假设我有一个rest端点,当调用它时,它会启动一个长时间运行的进程服务器端,例如

http://host/api/program/start
我希望将该进程的任何更新/输出从服务器端推送到客户端

我认为rest调用将返回某种唯一的id,客户端在连接到websocket时可以使用该id只接收关于特定进程的更新


如果在进程的第一个输出之前没有连接到客户端,我必须考虑缓冲进程的输出/更新以发送到客户端,但不管怎样,实现套接字数据处理的最佳方法是什么?我可以以某种方式使用socket.io文件室/名称空间吗?

如果您真的想这样做,我建议通过初始的
start
调用生成ID,然后将其作为参数传递给长时间运行的进程。然后,该进程将所有消息发布到该ID(相应的客户端也在侦听该ID)

然而,我不鼓励你放弃这种方法。处理节点中的子进程有很多方法,因此您可能需要进一步研究这些选项,以避免最终处理各地的僵尸进程


首先想到的是。另一个选择是类似的。这两种方法中的任何一种都符合(我认为)您正在尝试做的事情,但允许您对子进程保持更多的控制。

是的,这不是一个问题,我已经在节点中使用子进程完成了所有这些工作。我正在捕获stdout和stderr或进程,但希望将其(通过websockets实时)推送到已连接的客户端,这些客户端提供了侦听此进程的id。这是关于如何针对特定的套接字,而不是发送到所有套接字/广播输出的一点。那么我不确定最初的问题是什么。我会完全按照您所说的那样做,并在生成子进程时生成一个唯一的字符串用作WebSocket命名空间。干杯,我将检查WS-namespaces-这就是我想知道的部分。房间/名称空间是否合适,或者我是否需要在后端解决其他问题。酷!这是我过去一直采用的方式,但也许其他人会提出更好的解决方案。祝你好运:)意识到我还没有接受这个问题的答案,这是很久以前的事了,但我记得最后使用了名称空间,所以我接受了这个答案以及随后的对话作为答案。CheersHuh..我将使用IP地址做什么?