节点一次运行许多POST请求

时间:2017-04-03 15:27:28

标签: node.js multithreading asynchronous

我想从我的node.js脚本中立刻发出一堆post请求我对每个请求都有相同的有效负载,并希望在某种循环中立即将它们全部旋转掉然后再制作他们在完成后写入数据库。 示例代码用于演示逻辑:

for (var i = 0; i < 10; i++) {
    makePostRequest(updateDB);
}

function makePostRequest (callback) {
    http.post("test", function (result) {callback(result)});
}

function updateDB(result) {
    db.put({result: result});
}

问题是,使用多线程执行此操作是否更好?或者节点是否会异步运行这些后置请求以处理它并导致相同的性能?换句话说,这些发布请求是否会以与您期望的多线程序行为相同的方式异步发生并产生相同的性能?

我的目标是尽量缩短执行时间。

3 个答案:

答案 0 :(得分:0)

我认为通过子进程从多线程看到的执行时间的改善将是最小的。正如您所说,请求已经异步执行。

事实上,随着n(并发请求数)的增加,您可能会看到性能下降。

可以肯定的是,你可以运行基准测试。

答案 1 :(得分:0)

在您的示例中,您并行发送10个请求。我认为这个数字很小,不会造成问题。

有些事情你必须要注意。

  • 服务器最多有并发传出连接
  • 远程服务器能够在不减速的情况下提供多少个并发请求?
  • 如果使用for循环启动请求,for循环将在请求被有效发送之前运行完成。

如果必须启动大量请求,如果限制最大并发请求数,它们将更快完成。另外,在调用setTimeout之间使用makePostRequest,考虑限制启动。

我不知道您需要采取这些预防措施的门槛是多少。

答案 2 :(得分:0)

我决定采用我之前在问题中描述的逻辑。推理是节点在不同的线程上单独运行其异步调用,以便它不阻塞主线程。他的意思是,运行POST异步将与我想要的多线程行为相似