node 原理 - HTTP - HTTP 连接数量限制

1,725 阅读1分钟

这个是系列的第二篇文章,HTTP 代理,上一篇文章:

首先 node 的 http 模块,底层是基于 TCP 实现的,在 keepalive 的情况下,一个底层会话链接可以用于多次请求。于是为了重用 http 链接,http 模块包含一个默认的客户端代理对象 http.globalAgent,对每个服务端创建的链接进行管理。

默认情况下,使用 ClientRequest 对同一服务端发起的 HTTP 请求最多可以创建5个连接,实质上是一个链接池。如果当前连接池已满,新来的请求将会进入等待区域,当有连接释放后,会向等待区域询问是否有等待中的请求,如果有的话执行。

HTTP客户端对同一个HTTP服务器同时发起10次请求时,实际上只有5个请求处于并发状态,后面的请求将会加入等待区域,待前面有请求完成后,才会真正发出。这与浏览器对同一域名下有下载链接数的限制是相同的行为。

如果你在服务器端通过ClientRequest调用网络中的其他HTTP服务,需要关注网络请求的限制,一旦请求量过大,连接限制将会限制服务的性能。如果需要改变,可以将 options 中的 agent 选项设置为 false,用来脱离连接池的管理。也可以自行构造代理对象

Agent对象的sockets和requests属性分别表示当前连接池中使用中的连接数和处于等待状态 的请求数,在业务中监视这两个值有助于发现业务状态的繁忙程度。