【问题标题】:socket.io send data to client based on id passed by clientsocket.io 根据客户端传递的 id 向客户端发送数据
【发布时间】:2013-12-31 06:05:08
【问题描述】:

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

http://host/api/program/start

我想将该进程的任何更新/输出从服务器端推送到客户端。

我认为 rest 调用会返回某种唯一的 id,然后客户端可以在连接到 websocket 时使用它来仅接收有关该特定进程的更新。

如果它们在进程的第一个输出之前没有连接,我将不得不考虑缓冲进程的输出/更新以发送到客户端,但无论如何,实现套接字数据处理这个?我可以以某种方式使用 socket.io 房间/命名空间吗?

【问题讨论】:

  • 呵呵..我用 IP 地址做什么?

标签: node.js architecture express socket.io


【解决方案1】:

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

但是,我不鼓励您采用这种方法。在 Node 中处理子进程有很多方法,因此您可能需要更多地研究这些选项,以免最终处理整个地方的僵尸进程。

首先想到的是ChildProcess。另一种选择是WebWorker Threads。这些中的任何一个都符合您(我认为)您正在尝试做的事情,但可以让您对子进程保持更多的控制。

【讨论】:

  • 是的,这不是问题,我已经在节点中使用子进程完成了所有这些工作。我正在捕获 stdout 和 stderr 或进程,但想将此(通过 websocket 实时)推送到已提供 id 以收听此进程的已连接客户端/客户端。这是关于如何定位特定套接字的一点,而不是发送到所有套接字/广播输出..
  • 那么我想我不确定原来的问题是什么。我会完全按照您所说的去做,并在您生成子进程时生成一个唯一的字符串以用作 WebSocket 命名空间。
  • 干杯,然后我会检查 WS 名称空间 - 这就是我想知道的部分。房间/命名空间是否合适,或者我是否需要在后端处理其他事情。
  • 酷!这就是我过去一直这样做的方式,但也许其他人会用更好的解决方案发表评论。祝你好运:)
  • 意识到我还没有接受这个答案,那是很久以前的事了,但我记得最后使用了命名空间,所以接受了这个答案和随后的对话作为答案。干杯
猜你喜欢
  • 1970-01-01
  • 2015-01-08
  • 1970-01-01
  • 2013-02-21
  • 1970-01-01
  • 2014-10-24
  • 2013-02-01
  • 2017-05-07
相关资源
最近更新 更多