node.js - 外部程序返回后Nodejs如何更新客户端?

标签 node.js asynchronous architecture external executable

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

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

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

enter image description here

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

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

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

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

最佳答案

我开始在我的应用程序中使用队列,我和你有同样的问题。

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

我认为这称为 Pub/Sub。有一些技术,如 Redis这也有助于实现它。

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

关于node.js - 外部程序返回后Nodejs如何更新客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29446462/

相关文章:

python - 我如何在 celery 中指定 SQS 队列名称

java - 分离模型、 View 和 Controller 的最佳方法

async/await 函数中的 JavaScript Promise 解析最终的响应数组

node.js - Electron 应用程序应如何处理 OAuth 回调

javascript - 在 Node.js 中,如何使用 node-seq 顺序链接异步函数?

JavaScript async 函数,当返回 promise 在没有返回值的情况下 resolved

ios - react native - 在构建发布时将 --max_old_space_size 添加到 iOS 项目

linux - 通过 DD-WRT 或 OpenWRT 在路由器上使用 NodeJs?

c# - 通用接口(interface)和多态性

java - 如何用Java实现HTTP请求队列