【问题标题】:Nodejs how to handle multiple parallel requests incase of blocking processNodejs如何在阻塞进程的情况下处理多个并行请求
【发布时间】:2016-07-14 08:49:45
【问题描述】:

我正在做一个小项目,其中用户向我的服务器发出 http 请求,然后我从三个不同的服务器获取并处理一些数据,然后将汇总结果返回给客户端。

当两个以上的客户端同时发出请求时,一切正常,所有客户端都无法获得响应并面临超时错误。

如何处理这件事。

提前致谢

【问题讨论】:

  • 您不应该在 node.js 中发出阻塞请求,默认情况下它应该是异步的。如果您必须进行阻塞操作,您可以添加一些负载均衡器,但最好切换到异步操作。愿意分享更多关于您的案例吗?也许一些代码?
  • 向三个不同服务器发出的请求是异步的,但它们的结果必须在发送给用户之前进行处理和汇总。有没有其他方法可以做到这一点?
  • 所以我想这需要很多时间来做这个“总结”?然后我建议将计算拆分为几个较便宜的块。

标签: javascript node.js io server


【解决方案1】:

好的,我明白了。我建议对这类东西使用 es6 承诺。 您可以使用request-promisebluebird 向其他服务器发出http 请求。

然后就是:

var rp = require('request-promise');
var bluebird = require('bluebird');

bluebird
.all(rp('http://www.google.com'), rp('http://example.com'))
.then(function (googleResponse, exampleResponse) {
    // Some computation
    return someResult;
})
.then(function (previousResult) {
    // Some more computation
    return someResult;
});

基本上你想要的是进行计算的一部分,然后返回并允许节点接管,然后在下一步然后进行计算的其他部分等等。如果你将你的进程分成几个小块,你应该能够减少阻塞。

除了可以检查节点集群之外,这是一个非常简单的过程,可以让您处理少数工作人员之间的服务器负载: https://www.sitepoint.com/how-to-create-a-node-js-cluster-for-speeding-up-your-apps/

【讨论】:

    猜你喜欢
    • 2018-12-13
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    相关资源
    最近更新 更多