new Agent([options])
options<Object> 可在代理上设置的可配置选项集合。可以包含以下字段:keepAlive<boolean> 即使没有未完成的请求,也保持套接字存在,以便将来可以使用这些套接字而无需重新建立 TCP 连接。不要与Connection头的keep-alive值混淆。使用 agent 时,总是会发送Connection: keep-alive头,除非明确指定了Connection头,或者keepAlive和maxSockets选项分别设置为false和Infinity,在这种情况下将使用Connection: close。默认值:false.keepAliveMsecs<number> 使用keepAlive选项时,指定 TCP Keep-Alive 数据包的 初始延迟。当keepAlive选项为false或undefined时,此项将被忽略。默认值:1000。agentKeepAliveTimeoutBuffer在确定套接字过期时间时,从服务器提供的keep-alive: timeout=...提示中减去的 <number> 毫秒。这个缓冲时间有助于确保代理在服务器关闭套接字之前稍微关闭它,从而减少在即将被服务器关闭的套接字上发送请求的可能性。默认值:1000。maxSockets<number> 每个主机允许的最大套接字数。如果同一主机打开多个并发连接,每个请求将使用新的套接字,直到达到maxSockets值。如果主机尝试打开的连接数超过maxSockets,额外的请求将进入待处理请求队列,并在现有连接终止时进入活动连接状态。这确保了在任何时间点,从给定主机最多只有maxSockets个活动连接。默认值:Infinity。maxTotalSockets<number> 允许所有主机使用的最大套接字总数。每个请求将使用一个新的套接字,直到达到最大值。 默认值:Infinity。maxFreeSockets<number> 每个主机保持空闲状态的最大套接字数量。仅在keepAlive设置为true时有效。默认值:256。scheduling<string> 在选择下一个可用套接字时应用的调度策略。它可以是'fifo'或'lifo'。 这两种调度策略的主要区别在于'lifo'会选择最近使用的套接字,而'fifo'会选择最久未使用的套接字。 在请求速率较低的情况下,'lifo'调度可以降低选择已因不活动而被服务器关闭的套接字的风险。 在请求速率较高的情况下,'fifo'调度可以最大化打开的套接字数量,而'lifo'调度会尽可能保持套接字数量较少。 默认值:'lifo'。timeout<number> 套接字超时(毫秒)。这将设置套接字创建时的超时时间。proxyEnv<Object> | <undefined> 代理配置的环境变量。详情请参见 内置代理支持。默认值:undefinedHTTP_PROXY<string> | <undefined> HTTP 请求应使用的代理服务器 URL。如果未定义,则 HTTP 请求不使用代理。HTTPS_PROXY<string> | <undefined> 用于 HTTPS 请求应使用的代理服务器的 URL。如果未定义,则 HTTPS 请求不使用代理。NO_PROXY<string> | <undefined> 指定不应通过代理的端点的模式。http_proxy<string> | <undefined> 与HTTP_PROXY相同。如果两者都设置了,http_proxy优先。https_proxy<string> | <undefined> 与HTTPS_PROXY相同。如果两者都设置了,https_proxy优先。no_proxy<string> | <undefined> 与NO_PROXY相同。如果两者都设置了,no_proxy优先。
defaultPort<number> 当请求中未指定端口时使用的默认端口。默认值:80。protocol<string> 代理使用的协议。默认值:'http:'。
socket.connect() 中的 options 也受支持。
要配置其中的任何一个,必须创建一个自定义的 http.Agent 实例。
【To configure any of them, a custom http.Agent instance must be created.】
import { Agent, request } from 'node:http';
const keepAliveAgent = new Agent({ keepAlive: true });
options.agent = keepAliveAgent;
request(options, onResponseCallback);const http = require('node:http');
const keepAliveAgent = new http.Agent({ keepAlive: true });
options.agent = keepAliveAgent;
http.request(options, onResponseCallback);