速率限制与节流

安全注意事项

/**
 * 用于 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)
    );
  }
}

最后更新于