在node.js中的另一个子进程中执行webservice的代码

时间:2016-06-17 05:37:01

标签: javascript node.js child-process

我需要了解如何在单独的子进程中运行耗时的Web服务的理解和代码体系结构。在单独的子进程中运行这种运行时间更长的Web服务是否合适。 Web服务将收到高达2000个嵌套json对象的工资负载,数字可能更少或更多,它将获取数据并插入数据库。以下只是提供想法的代码片段。

router.post('/longRunningWebservice', function (req, res) {
    //for loop to iterate 2000 json objects 
    //it has some queries to insert data
    //it has some if conditions to check
    //and finally res.send()
}); 

我需要了解并希望在单独的子进程中运行代码以使其更具可伸缩性,并且还可以利用其他内核。

1 个答案:

答案 0 :(得分:0)

  1. 在代码的开头分叉一些工人
  2. 在您的代码中编写单独的工作人员任务和主任务'if(cluster.isMaster){...} else {...}'
  3. 使用IPC消息传递或redis pub / sub消息传递将需要处理的数据发送给工作者,在工作者处理完数据后,它可以将数据发送回处理响应的主服务器。
  4. 其他说明:

    • 您可以设置多个工作人员并确定哪个工作正忙,哪个不是
    • redis pub / sub如果比使用IPC更好的IPC cuz你只能与master-worker进行通信,使用redis pub / sub你可以与master-worker和worker-worker进行通信。
    • 最佳做法是设置一个主人,它只会分叉工人,如果他们因为错误或其他原因而重新成型,你也可以创建1个处理http请求的工人和3个处理数据的工人,例如。如果你有4个处理器核心。

    其他方法: fork工作人员具有所有相同的任务(处理http和数据处理),集群将自动处理负载平衡,而不是for循环创建一个递归函数,处理单个json对象然后用setimmediate调用自己,因此数据处理不会阻止事件循环一个工人可以处理多个请求。简单的方法