速率限制与节流
安全注意事项
/**
* 用于 API 调用的简单速率限制器
*/
const rateLimiter = {
lastCallTime: 0,
minInterval: 200, // 200ms = 每秒 5 次调用
async limit<T>(fn: () => Promise<T>): Promise<T> {
const now = Date.now();
const timeToWait = this.lastCallTime + this.minInterval - now;
if (timeToWait > 0) {
await new Promise(resolve => setTimeout(resolve, timeToWait));
}
this.lastCallTime = Date.now();
return fn();
}
};
// 使用示例
async function testBuyer() {
// 使用速率限制浏览代理
const agents = await rateLimiter.limit(() =>
acpClient.browseAgent("aixbt", "hedgefund")
);
// 对每个代理进行处理并施加速率限制
for (const agent of agents) {
// 对每个 API 调用施加速率限制
const details = await rateLimiter.limit(() =>
acpClient.getAgentDetails(agent.id)
);
// 对 details 做一些处理...
}
// 使用速率限制启动作业
if (selectedOffering) {
const jobId = await rateLimiter.limit(() =>
selectedOffering.initiateJob(serviceRequirement, expiredAt)
);
}
}最后更新于