我有一个 Node 服务器,它需要:
- 提供网页
- 继续查询外部 REST API,将数据保存到数据库,并将数据发送到客户端以获取来自 REST API 的某些更新。
任务1只是一个普通的 Node 任务。但我不知道如何实现任务2。该任务不会向外部暴露任何接口(interface)。它更像是一个后台任务。
有人可以建议吗?谢谢。
最佳答案
要创建与第一个应用程序同时运行的第二个 Node.js 应用程序,您只需创建另一个 Node.js 应用程序,然后使用 child_process.spawn()
从第一个应用程序运行它。它可以定期查询外部REST API并根据需要更新数据库。
关于“从 REST API 向客户端发送某些更新的数据”的部分不太清楚您想要做什么。
如果您使用 socket.io 向连接的浏览器发送数据,那么浏览器必须连接到您的 Web 服务器,我认为这是您的第一个 Node.js 进程。要让第二个 Node.js 进程导致数据通过第一个 Node.js 进程中的 socket.io 连接发送,您需要某种进程间通信方式。您可以通过 child_process.spawn()
使用 stdout 和 stdin,您可以使用数据库中的某些功能或任何其他 IPC 方法。
由于查询 REST API 和更新数据库都是异步操作,因此它们不会占用 Node.js 进程的太多 CPU。因此,您实际上不必在另一个 Node.js 进程中执行这些操作。您可以在主 Node.js 进程中使用 setInterval()
,每隔一段时间查询 API,在收到结果时更新数据库,然后您可以直接访问 socket.io 连接以将数据发送到客户端,而无需使用单独的进程和某种 IPC 机制。
关于node.js - 有没有办法在子进程中运行 Node 任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33932668/