目的是避免 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 请求的对象。
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 请求。这使得我们可以在不同的请求之间使用不同的代理配置。
总的来说,这段代码的目的是配置全局的 HTTPS 代理,以确保在应用程序中使用的所有 HTTPS 请求都遵循相同的连接池和超时设置。这对于优化网络性能和资源利用是很有帮助的,尤其是在处理大量并发请求时。