以下是一个使用Node.js和Axios模块编写的高并发HTTP请求示例:
const axios = require('axios');
// 定义要请求的URL
const url = 'https://jsonplaceholder.typicode.com/posts';
// 定义要发送的请求数据
const requestData = {
title: 'foo',
body: 'bar',
userId: 1
};
// 定义要发送的请求数量和并发数量
const requestCount = 100;
const maxConcurrentRequests = 10;
// 发送请求的函数
const sendRequest = async () => {
try {
const response = await axios.post(url, requestData);
console.log(response.data);
} catch (error) {
console.error(error);
}
};
// 随机延迟函数
const randomDelay = () => {
return Math.floor(Math.random() * 1000);
};
// 发送请求函数的队列
const requestQueue = [];
// 添加请求到队列中
for (let i = 0; i < requestCount; i++) {
requestQueue.push(() => {
return new Promise((resolve, reject) => {
setTimeout(async () => {
try {
await sendRequest();
resolve();
} catch (error) {
reject(error);
}
}, randomDelay());
});
});
}
// 执行请求队列中的请求
const executeRequests = async () => {
while (requestQueue.length > 0) {
// 从队列中选取一段长度为maxConcurrentRequests的请求
const requests = requestQueue.splice(0, maxConcurrentRequests);
// 并行执行这些请求
await Promise.all(requests.map(request => request()));
}
};
executeRequests();
此示例使用Axios模块发送HTTP请求,并使用Promise.all并行发送多个请求。此外,还使用了一个请求队列和一个随机延迟函数,以模拟高并发请求的场景。
maxConcurrentRequests
是一个整数变量,用于定义同时执行的最大并发请求数量。在该示例中,我们使用一个请求队列来存储所有待发送的请求,并在运行时选择一批具有最大长度的请求,以便能够同时执行多个请求。
通过控制最大并发请求数量,我们可以避免系统资源过度消耗,同时确保能够高效地发送大量的HTTP请求。 值得注意的是,在实际情况下,需要根据应用程序的实际需求和可用资源来选择合适的最大并发请求数量,以达到最佳性能,并确保不会造成过多的系统负载。