http的模块说实话有点大,但是又不得不看是吧。第一个就先总结Agent类的基本知识概括。
(说句好不意思的话,我的版权意识比较差,从别的作者捞过来的内容,下次只要我没忘记,都会加在尾部。)
首先 Node.js 的 http 库提供三个主要的函数:
- http.request
- http.get
- http.createServer
前两个函数主要是为了创建 http 客户端,向其它服务器发送请求,http.get 只是 http.request 的发送 get 请求的便捷方式;
而 http.createServer 是为了创建WEB服务器,比如大名鼎鼎的express、Koa就是基于 http.createServer 封装的。
而 http.Agent 主要是为 http.request,http.get提供代理服务的,用于管理http连接的创建,销毁及复用工作。
在浏览器中维护这些连接是浏览器的行为我们不需要关心,但在服务端这些连接需要我们自己去维护,所以node提供了http.Agent来帮我们维护。
http.request, http.get 默认使用http.globalAgent作为代理,每次请求都是“建立连接-数据传输-销毁连接”的过程,如果我们想让多个请求复用同一个 connection,则需要重新定义 agent 去覆盖默认的 http.globalAgent。
以上源自于知乎 -张佃鹏 -链接:https://www.zhihu.com/question/58996077/answer/518247970
引用了一位大大的简单介绍,非常的通俗易懂。现在我们再回过头来看看官方文档给出的Api就能够快速入门了(我往往都是这么入门的)
先介绍一些这个类实例:
new Agent(options) =>
options 要在代理上设置的可配置选项集。可以包含以下字段:
- keepAlive 即使没有未完成的请求,也要保持套接字,这样它们就可以被用于将来的请求而无需重新建立 TCP 连接。 不要与 Connection 请求头的 keep-alive值混淆。Connection这个请求头在使用代理时默认发送,除非手动指定了Connection 请求头、或者 keepAlive 和 maxSockets 选项分别设置为 false 和 Infinity,在这种情况下将会使其默认为Connection: close。 默认值: false。(默认不适用长连接)
- keepAliveMsecs 当使用 keepAlive 选项时,指定用于 TCP Keep-Alive 数据包的初始延迟。当 keepAlive 选项为 false 或 undefined 时则忽略。默认值: 1000。(主要时发送一个ack探测包发到对方,检测是否这个链接还有效果,比如服务器宕机了你也不知道,还一直保存着链接。同理服务器也会对长连接这么干)
- maxSockets 每个主机允许的套接字的最大数量。默认值: Infinity。agent限制对某个地址的最大请求数目,可以理解为浏览器限制对同一个域名端口的最大并发数.
- maxFreeSockets 在空闲状态下保持打开的套接字的最大数量。仅当 keepAlive 被设置为 true 时才相关。默认值: 256。
- timeout 套接字的超时时间,以毫秒为单位。这会在套接字被连接之后设置超时时间。
http.request() 使用的默认的 http.globalAgent 具有所有这些值且被设置为各自的默认值。
要配置其中任何一个,则必须创建自定义的 http.Agent 实例。
const http = require('http');
const keepAliveAgent = new http.Agent({ keepAlive: true });
options.agent = keepAliveAgent;
http.request(options, onResponseCallback);
主要的介绍就如上,基本上时文档+我的理解得出,接下来继续就是一些api的理解,请各位兄贵自行移动官方文档查看,相信聪明的你应该可以自行阅读这一小节的内容了。