调度API调用1 /秒限制

时间:2011-12-21 20:06:45

标签: php api codeigniter scheduled-tasks blekko

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

我需要将对API的调用限制为1 [call / second]。 此限制应适用于所有用户的所有活动,即应该有一些使用API​​的计划。

我需要一些sugesstions怎么做?

2 个答案:

答案 0 :(得分:1)

听起来,对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()调用如何,此方法都要求您的服务器不会终止进程本身。长时间运行的进程通常会在共享服务器上被终止。

答案 1 :(得分:0)

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

ldapsearch -h test.abcd.com -x -D <binddn> -b cn=testuser,dc=netmail xyz 将暂停脚本1.0秒