我正在编写一个主要做两件事的 NodeJS 应用程序:
- 运行网络 GUI(简单的 HTML/JS)
- 根据用户输入运行外部程序(二进制文件)
我希望能够异步运行这些外部程序,因为它们可能需要几分钟才能完成。当他们返回时,我想更新 Web GUI 以显示结果。这是最基本的概念:
- 用户输入参数并按下操作按钮。
- 服务器使用来自用户的参数运行外部程序。
- 当程序返回时,服务器获取输出(一个 XML 文件)并将 数据库中的内容。
- 然后服务器使用来自数据库的结果更新客户端。
需要注意的是,用户可以同时运行多个具有不同参数的外部程序。
当外部程序完成时,我应该如何更新客户端(Web GUI):是否必须由客户端轮询更新(例如,如果结果在此处,则通过查看数据库) ?或者有没有办法从服务器“推送”到客户端?
我也在查看设计示例以实现此目的,因此请随时提供有关此架构的建议和资源。
最佳答案
我开始在我的应用程序中使用队列,我和你有同样的问题。
我认为(但仍未尝试)的一个解决方案是在用户启动此类异步进程时启动一个套接字(使用 socket.io)并发送一个回调 url(指向您的快速服务器) 过程。 回调将有一个客户端/ session id 参数来识别谁发出了请求并选择正确的套接字将消息推回。 使用套接字,您不必从客户端到服务器进行池化。
我认为这称为 Pub/Sub。有一些技术,如 Redis这也有助于实现它。
我也希望收到有关此方法的反馈。你怎么看?
关于node.js - 外部程序返回后Nodejs如何更新客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29446462/