【问题标题】:Schedule API calls to 1/second limit将 API 调用安排为 1/秒限制
【发布时间】:2012-01-25 14:37:03
【问题描述】:

我正在构建使用 Blekko API(网络搜索 API)的网络应用程序。 应用程序是多用户的。

我需要将对 API 的调用限制为 1[调用/秒]。 此限制应适用于所有用户的所有活动,即应该有一些使用 API 的时间表。

我需要一些建议怎么做?

【问题讨论】:

  • 将所有查询放入队列并由一名工作人员处理
  • 您想阻止以超过 1/秒的速度发出的 API 调用,还是将它们排队并以每秒 1 次的速度执行?
  • 我想将它们排队并以每秒 1 次的速度执行。

标签: php api codeigniter scheduled-tasks blekko


【解决方案1】:

一个简单的方法是使用usleep()

usleep(1000000); 将暂停脚本 1.0 秒

【讨论】:

    【解决方案2】:

    听起来对 API 调用的响应并不是太重要,因为您正在谈论排队。如果是这种情况,我会将 API 请求 URL 转储到数据库表中。然后使用后台工作进程,我会为此做一些事情:

    set_time_limit(0);
    
    $api_requests = array();
    while (TRUE)
    {
        if (count($api_requests) == 0)
        {
            // get multiple records from DB to limit requests and add
            // to the $api_requests array.
    
            // if DB returns no results, maybe sleep a few extra seconds
            // to avoid "slamming" the database.
        }
    
        // get the next API request from the array
        $request = array_shift($api_requests);
    
        // send API request to Blekko
    
        // process API results
    
        // sleep 1 sec
        sleep(1);
    }
    

    这有点“忙”的循环,但它可以确保您每秒运行的请求不会超过一个,并且还可以保证排队的请求不会等待太久才能被处理。

    注意:此方法确实要求您的服务器不会终止进程本身,无论 set_time_limit() 调用如何。长时间运行的进程通常会在共享服务器上被终止。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-23
      • 2013-12-13
      • 2017-07-04
      • 1970-01-01
      • 2015-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多