我有一个特定的用例,我试图使用 Node.js 来解决。我从 NodeJS 收到的响应时间不是我所期望的。
该应用程序是一个 express.js Web 应用程序。流程如下图a。请求到达服务器。湾。根据参数调用后端 REST 服务。C。REST 服务的响应具有指向多个其他对象的链接。d。浏览每个链接并聚合数据。e. 该数据被格式化(不多)并发送到客户端。
实际的测试数据——来自 C 的响应有 100 个链接,因此我进行了 100 个并行调用(我使用的是 async.map)。每个后端服务的响应时间不到 30 毫秒。但是 100 个请求的总体响应时间是 4 秒。这是相当高的。
我观察到的是:第一个后端请求和最后一个后端请求之间的时间差约为 3 秒。我相信这是因为 Node 是单线程的,并且需要 3 秒来放置所有 100 个 http 请求。
下面给出了我用来进行并行调用的代码
var getIndividualRecord = function(entity,callback1)
{
httpExecutor.executeRequest( entity.link.url, callback1);
}
var aggregateData = function(err, results)
{
callback(null, results);
}
async.map(childObjects, getIndividualRecord, aggregateData);
childObjects 是一个包含 100 条记录的数组。httpExecutor 使用请求模块进行 REST 调用。
我做错了什么,或者这是 Node 的错误用例吗?