Node.js 是否有办法在子进程中运行节点任务?

Node.js 是否有办法在子进程中运行节点任务?,node.js,Node.js,我有一个节点服务器,它需要: 为网页服务 继续查询外部REST API,将数据保存到数据库,并将数据发送到客户端,以便从REST API进行某些更新 任务1只是一个普通的节点任务。但是我不知道如何执行任务2。此任务不会向外部公开任何接口。这更像是一项背景任务 有人能建议吗?谢谢。任务1: 快车是完成这项任务的好方法。 您可以探索: 任务2: 如果您已使用Expressjs。然后,您可以在Express框架中编写逻辑。 然后可以使用节点模块完成此任务。这是一个可以永远运行后台脚本的简单工具。您可

我有一个节点服务器,它需要:

  • 为网页服务
  • 继续查询外部REST API,将数据保存到数据库,并将数据发送到客户端,以便从REST API进行某些更新
  • 任务1只是一个普通的节点任务。但是我不知道如何执行任务2。此任务不会向外部公开任何接口。这更像是一项背景任务

    有人能建议吗?谢谢。

    任务1: 快车是完成这项任务的好方法。 您可以探索:

    任务2:

    如果您已使用Expressjs。然后,您可以在Express框架中编写逻辑。 然后可以使用节点模块完成此任务。这是一个可以永远运行后台脚本的简单工具。您可以使用forever连续运行脚本(无论是否在node.js中编写)

    看看:

    要创建与第一个node.js应用程序同时运行的第二个node.js应用程序,您只需创建另一个node.js应用程序,然后使用
    child\u process.spawn()
    从第一个node.js应用程序运行它。它可以定期查询外部RESTAPI,并根据需要更新数据库

    关于“从REST API向客户端发送某些更新的数据”的部分“并不清楚您要做什么

    如果您使用socket.io向连接的浏览器发送数据,那么浏览器必须连接到web服务器,我认为这是您的第一个node.js进程。要让第二个node.js进程通过第一个node.js进程中的socket.io连接发送数据,您需要一些进程间通信方式。您可以通过
    child\u process.spawn()
    使用stdout和stdin,您可以使用数据库中的某些功能或其他几种IPC方法中的任何一种


    因为查询REST API和更新数据库都是异步操作,所以它们不会占用node.js进程的大量CPU。因此,您实际上不必在另一个node.js进程中执行这些操作。您可以在main node.js进程中使用
    setInterval()
    ,每隔一段时间查询一次API,在收到结果时更新数据库,然后您可以直接访问socket.io连接以向客户端发送数据,而无需使用单独的进程和某种IPC机制。

    我将使用socket.io向客户端发送数据(一个网页).@bagusflyer-如果您使用socket.io将数据发送到连接的浏览器,我在回答中添加了一些信息。我尝试了setInterval(),它也可以工作。但我想知道哪个更好。子进程是否在另一个线程中运行?它会节省CPU时间吗?@bagusflyer-一个子进程正在另一个进程(这是一个单独的线程)中运行。我的答案的最后一段包含关于CPU时间的注释。我会说“不要把事情弄得太复杂”。如果您使用
    setInterval()
    获得了完全可以接受的性能,并且这种设计没有问题,那么请坚持使用它,因为它更易于实现。是否可以在同一个节点应用程序中运行此任务?我不明白这个问题的答案是“永远”。forever是一种保持进程运行并在崩溃时自动重新启动进程的工具。它不是执行OP要求的操作的工具。@bagusflyer,如果您在同一个节点应用程序中执行它。您需要根据需要在服务器上为其设置一个cron作业。@jfriend00 forever用于将后台任务与其他正常活动隔离开来。我认为您在这里感到困惑。“永远”不是这样的。如果第二个node.js应用程序只是作为自己的应用程序运行,那么它已经与其他活动隔离。永远不会提供任何额外的隔离。几乎“永远”所做的就是在应用程序停止运行时重新启动它。