先看代码
const axios = require('axios');
const https = require('https');
const { Agent } = require('https');
// 使用自定义代理agent来启用HTTP/2
const agent = new Agent({
keepAlive: true,//开启长连接
maxSockets: 1000,
ca: https.globalAgent.options.ca,
});
// 创建一个axios实例
const instance = axios.create({
baseURL: 'https://www.bitget.fit', // 设置请求的基础URL
timeout: 1000, // 请求超时时间(毫秒)
httpsAgent: agent
});
很重要的就是这个 httpsAgent 参数,优化后直接从每次请求的 370ms 变到150ms
代码解释
1. const https = require('https');
这行代码导入了Node.js的https
模块,该模块提供了用于HTTPS请求的功能。
2. const { Agent } = require('https');
这行代码从https
模块中解构出Agent
类。Agent
类用于创建自定义的代理agent,可以配置代理的行为。
3. const agent = new Agent({ ... });
这行代码创建了一个新的Agent
实例,并传入一个配置对象。这个对象定义了代理agent的行为:
- keepAlive: true
:启用长连接,这样在多个请求之间可以重用TCP连接,减少了建立新连接的开销。
- maxSockets: 1000
:设置代理agent可以同时打开的最大套接字数。这个值可以根据服务器的能力进行调整。
- ca: https.globalAgent.options.ca
:设置代理agent使用的CA证书,这里使用了https.globalAgent
的默认CA证书。
注意!!!
如果你请求的是非HTTPS的地址(例如http://www.bitget.fit
),那么设置httpsAgent: agent
将不会起作用。因为httpsAgent
是专门用于HTTPS请求的代理配置,而HTTP请求需要使用http.Agent
。
如果你需要对HTTP请求也进行代理,你需要创建一个http.Agent
的实例,并将其配置为所需的代理设置。然后,在发起HTTP请求时,将这个http.Agent
实例传递给请求选项。
示例:
const http = require('http');
const { Agent } = require('http');
// 创建HTTP代理agent
const httpAgent = new Agent({
keepAlive: true,
maxSockets: 1000,
});
// 创建一个axios实例
const instance = axios.create({
baseURL: 'https://www.bitget.fit', // 设置请求的基础URL
timeout: 1000, // 请求超时时间(毫秒)
httpAgent,
});