目的是避免 SNAT port exhaustion
问题:
const https = require('https');
https.globalAgent = new https.Agent({
keepAlive: true,
maxSockets: 100,
maxFreeSockets: 10,
timeout: 60_000,
});
这段代码是使用 Node.js 中的 https
模块创建了一个全局的代理对象,并对其进行了一些配置。让我们逐行解释这段代码的含义:
const https = require('https');
- 引入 Node.js 的
https
模块,该模块提供了一个用于处理 HTTPS 请求的对象。
- 引入 Node.js 的
https.globalAgent = new https.Agent({ keepAlive: true, maxSockets: 100, maxFreeSockets: 10, timeout: 60_000, });
- 创建一个新的
https.Agent
实例,并将其赋给https.globalAgent
属性。https.Agent
是一个用于管理 HTTP 或 HTTPS 代理的对象。 参数对象包含了一些配置选项,下面是这些选项的含义:
keepAlive: true
:启用 HTTP Keep-Alive。当启用时,客户端和服务器之间的连接将保持打开状态,以便在多个请求之间重用。maxSockets: 100
:允许的最大套接字数。这指定了在同一时间可以与服务器建立的最大连接数。maxFreeSockets: 10
:最大空闲套接字数。指定在连接池中允许保持空闲状态的最大连接数。timeout: 60_000
:连接的超时时间,以毫秒为单位。如果连接在指定的时间内没有建立,则会被视为超时。
现在,让我们通过一些例子来说明这段代码的作用:
例子 1: 发送 HTTPS 请求
const https = require('https');
- 创建一个新的
// 使用全局代理发送 HTTPS 请求
https.get('https://www.example.com', (response) => {
// 处理响应
// ...
});
上述代码中,由于设置了全局代理,通过 `https.get` 发送的请求将使用上述配置的代理参数。
**例子 2: 使用自定义代理发送请求**
const https = require('https');
// 创建一个自定义代理
const customAgent = new https.Agent({
keepAlive: false,
maxSockets: 5,
timeout: 30_000,
});
// 发送 HTTPS 请求时使用自定义代理
const options = {
hostname: 'www.example.com',
port: 443,
path: '/',
method: 'GET',
agent: customAgent, // 指定代理
};
const req = https.request(options, (res) => {
// 处理响应
// ...
});
req.end();
在这个例子中,我们创建了一个自定义的 `https.Agent` 实例,并将其用于发起 HTTPS 请求。这使得我们可以在不同的请求之间使用不同的代理配置。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。