Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了为什么node.js一次只处理6个请求?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我们有一个node.js服务器,它实现一个REST API作为一个中央服务器的代理,它有一个稍微不同的,不幸的是不对称的REST API。

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

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

requested GET URL under /api/v1/tasks/*: /api/v1/tasks/

这需要几秒钟从中央服务器获取列表。一旦它得到响应,服务器就会非常快地发生这种情况:

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

然后,每当这些请求的一对从中央服务器得到结果时,另外两条线路被快速熄灭。

所以看来我们的node.js服务器只愿意一次有六个请求。

解决方法

没有Node自身强加的TCP连接限制。 (总的来说,它是高度并发的,可以处理数千个并发连接。)您的操作系统可能会限制TCP连接。

更有可能的是,你要么对你的后端服务器有某种限制,要么就是打破了内置的http库的连接限制,但是如果没有关于该服务器或Node实现的更多细节,很难说。

Node的内置HTTP library(显然,在它之上构建的任何库,大多数)保持一个连接池(通过Agent类),以便它可以利用http保持活动。这有助于在向同一服务器运行许多请求时提高性能:而不是打开TCP连接,发出http请求,获取响应,关闭TCP连接并重复;可以对重用的TCP连接发出新的请求。

在节点0.10和更早版本中,认情况下,http代理将只打开与单个主机的5个并发连接。你可以很容易地改变这个:(假设你需要http模块为http)

http.globalAgent.maxSockets = 20; // or whatever

节点0.12认maxSockets设置为无限。

你可能想要保持某种连接限制。你不想完全压倒后端服务器与数百个http请求在第二性能将更有可能比如果你只是让代理的连接池做它的东西,限制请求,以不过载您的服务器。最好的办法是运行一些实验,以了解在您的情况下并发请求的最佳数量

然而,如果你真的不想连接池,你可以简单地绕过池完全 – 在请求选项中发送代理为false:

http.get({host:'localhost',port:80,path:'/',agent:falsE},callBACk);

在这种情况下,并发http请求绝对没有限制。

大佬总结

以上是大佬教程为你收集整理的为什么node.js一次只处理6个请求?全部内容,希望文章能够帮你解决为什么node.js一次只处理6个请求?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。