📅  最后修改于: 2023-12-03 14:44:39.147000             🧑  作者: Mango
在 Node.js 中,http.globalAgent
是一个全局的 Agent 类实例,用于管理 HTTP 请求的连接池。
每当我们使用 Node.js 的 http
或 https
模块发送一个 HTTP 请求时,Node.js 会创建一个新的 Agent 实例,该实例管理最多五个 TCP 连接以及与每个连接关联的请求队列。这意味着,在同一时间,同一个目标主机上的最多可以有五个并发请求。
这种模式可以节省一些 TCP 连接的创建和关闭开销,但是当我们需要执行大量的并发请求时,这五个并发连接可能不够用。此时,可以使用 http.globalAgent
。
我们可以通过访问 http.globalAgent
属性来访问全局的 Agent 实例。
const http = require('http');
console.log(http.globalAgent);
输出结果:
Agent {
_events: [Object: null prototype] {},
_eventsCount: 0,
_maxListeners: undefined,
defaultPort: 80,
protocol: 'http:',
options: { path: null },
requests: {},
sockets: { '127.0.0.1:80:': [Array] },
freeSockets: {},
keepAliveMsecs: 1000,
keepAlive: false,
maxSockets: Infinity,
maxFreeSockets: 256,
scheduling: 'fifo',
maxTotalSockets: Infinity,
totalSocketCount: 1
}
我们还可以通过在创建 http
或 https
请求时,传递 agent
属性来指定使用该全局 Agent 实例,比如:
const http = require('http');
// 禁用 Connection: keep-alive
http.get('http://example.com/', { agent: false }, (res) => {
// 处理响应
});
// 使用 globalAgent
http.get('http://example.com/', { agent: http.globalAgent }, (res) => {
// 处理响应
});
http.globalAgent
包含以下属性:
defaultPort
:默认端口号,用于没有指定端口号的请求。
protocol
:默认协议,即 'http:'
。
options
:默认选项。http.globalAgent
不接受任何选项。
requests
:所有当前正在排队的请求。
sockets
:所有当前打开的套接字。
freeSockets
:当前可用的空闲套接字。
keepAliveMsecs
:如果开启了 KeepAlive 功能,在客户端和服务器之间发送信息的时间间隔。
keepAlive
:是否启用 KeepAlive 功能。
maxSockets
:可同时使用的套接字的最大数量。
maxFreeSockets
:单个套接字最大的空闲时间(毫秒数)。
scheduling
:如何调度传入的请求。可选值包括 'fifo'
(先进先出)和 'lifo'
(后进先出)。
maxTotalSockets
:总共可使用的套接字的最大数量。
totalSocketCount
:当前已经使用的套接字数量。