相关疑难解决方法(0)

为什么node.js一次只处理六个请求?

我们有一个node.js服务器,它实现了一个REST API作为中央服务器的代理,该服务器有一个稍微不同的,不幸的是非对称的REST API.

我们的客户端在各种浏览器中运行,要求节点服务器从中央服务器获取任务.节点服务器从中央任务ID获取所有任务ID的列表,并将它们返回给客户端.然后,客户端通过代理为每个id发出两个REST API调用.

据我所知,这些东西都是异步完成的.在控制台日志中,当我启动客户端时它看起来像这样:

Requested GET URL under /api/v1/tasks/*: /api/v1/tasks/
Run Code Online (Sandbox Code Playgroud)

这需要几秒钟才能从中央服务器获取列表.一旦得到响应,服务器就会很快地解决这个问题:

Requested GET URL under /api/v1/tasks/id/:id :/api/v1/tasks/id/438
Requested GET URL under /api/v1/workflow/id/:id :/api/v1/workflow/id/438
Requested GET URL under /api/v1/tasks/id/:id :/api/v1/tasks/id/439
Requested GET URL under /api/v1/workflow/id/:id :/api/v1/workflow/id/439
Requested GET URL under /api/v1/tasks/id/:id :/api/v1/tasks/id/441
Requested GET URL under /api/v1/workflow/id/:id :/api/v1/workflow/id/441
Run Code Online (Sandbox Code Playgroud)

然后,每当一对这些请求从中央服务器获得结果时,另外两行很快被禁止.

所以我们的node.js服务器似乎只愿意一次发出六个请求.

node.js

65
推荐指数
3
解决办法
5万
查看次数

与浏览器相比,通过Node.js延迟HTTP请求

使用Node.js通过HTTP请求查询某些公共API.因此,我正在使用该request模块.我正在测量我的应用程序中的响应时间,并看到我的应用程序从API查询返回的结果比通过curl或浏览器中的"直接"请求慢2-3倍.此外,我注意到与启用HTTPS的服务的连接通常比纯HTTP服务更长,但这可能是巧合.

我试图优化我的request选择,但无济于事.例如,我查询

https://www.linkedin.com/countserv/count/share?url=http%3A%2F%2Fwww.google.com%2F&lang=en_US

我正在使用request.defaults设置所有请求的总体默认值:

var baseRequest = request.defaults({
    pool: {maxSockets: Infinity},
    jar: true,
    json: true,
    timeout: 5000,
    gzip: true,
    headers: {
        'Content-Type': 'application/json'
    }
});
Run Code Online (Sandbox Code Playgroud)

实际请求是通过

...
var start = new Date().getTime();

var options = {
    url: 'https://www.linkedin.com/countserv/count/share?url=http%3A%2F%2Fwww.google.com%2F&lang=en_US',
    method: 'GET'
};

baseRequest(options, function(error, response, body) {

    if (error) {
        console.log(error);
    } else {
        console.log((new Date().getTime()-start) + ": " + response.statusCode);
    }

});
Run Code Online (Sandbox Code Playgroud)

有人看到优化潜力吗?我做错了什么吗?提前感谢任何建议!

javascript http request node.js

12
推荐指数
2
解决办法
4304
查看次数

带有大量回调的NodeJS的性能

我正在开发NodeJS应用程序。有一个特定的RESTful API(GET),当用户触发该API时,它要求服务器执行大约10到20个网络操作才能从不同来源获取信息。所有这些网络操作都是异步回调,一旦它们全部完成,结果将由nodejs应用程序合并并发送回客户端。所有这些操作都是通过async.map函数并行启动的。

我只想了解一下,因为nodejs是单线程的,并且不使用多核计算机(至少不是没有集群),所以当节点有许多回调要处理时,节点如何扩展?回调的实际处理是取决于节点的单线程是否空闲,还是与主线程并行处理回调?

我问的原因是,我看到我的20个回调的性能从第一个回调降到了最后一个。例如,第一个网络操作(从10到20)需要141毫秒才能完成,而最后一个网络操作则需要约4秒钟(以从执行该功能到函数的回调返回值或一个错误)。它们都是相同的网络操作,因此命中相同的数据源,因此数据源不是瓶颈。我知道一个事实,即数据源响应单个请求所花费的时间不超过200ms。

我找到了这个线程,所以在我看来,一个线程需要处理所有回调和即将出现的新请求。

所以我的问题是,对于将触发许多回调的操作,优化其性能的最佳实践是什么?

javascript callback node.js

3
推荐指数
1
解决办法
308
查看次数

标签 统计

node.js ×3

javascript ×2

callback ×1

http ×1

request ×1