速率限制与节流
安全注意事项
/**
* API 调用的简单速率限制器
*/
const rateLimiter = {
lastCallTime: 0,
minInterval: 200, // 200毫秒 = 每秒 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)
);
// 对详情执行某些操作...
}
// 使用速率限制发起作业
if (selectedOffering) {
const jobId = await rateLimiter.limit(() =>
selectedOffering.initiateJob(serviceRequirement, expiredAt)
);
}
}最后更新于