Nodejs如何在外部程序返回后更新客户端?

ack*_*k__ 5 architecture executable asynchronous external node.js

我正在编写一个 NodeJS 应用程序,主要做两件事:

  • 运行 Web GUI(简单的 HTML/JS)
  • 根据用户输入运行外部程序(二进制文件)

我希望能够异步运行这些外部程序,因为它们可能需要几分钟才能完成。当他们返回时,我想更新 Web GUI 以显示结果。这是非常基本的概念:

在此输入图像描述

  1. 用户输入参数并按下操作按钮。
  2. 服务器使用用户的参数运行外部程序。
  3. 当程序返回时,服务器获取输出(XML 文件)并将内容放入数据库中。
  4. 然后,服务器使用数据库中的结果更新客户端。

应该注意的是,用户可以同时运行多个具有不同参数的外部程序。

当外部程序完成时,我应该如何更新客户端(Web GUI):是否必须是客户端轮询更新(例如,如果结果在这里,则通过在数据库中查找)?或者有没有办法从服务器“推送”到客户端?

我还在研究实现此目的的设计示例,因此请随时提供有关此架构的建议和资源。

Tul*_*lio 2

我开始在我的应用程序中使用队列,并且遇到了与您相同的问题。

我认为(但仍未尝试)的一种解决方案是当用户启动此类异步进程时启动套接字(使用 socket.io),并将回调 url(指向您的 Express 服务器)发送到过程。回调将有一个客户端/会话 ID 参数来识别谁发出了请求,并选择正确的套接字来推送消息。使用套接字,您不必从客户端到服务器进行池化。

我认为这就是所谓的 Pub/Sub。像Redis这样的一些技术也可以帮助实现它。

我也希望收到有关此方法的反馈。你怎么认为?