1

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

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

我需要一些建议怎么做?

4

2 回答 2

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() 调用如何。长时间运行的进程通常会在共享服务器上被终止。

于 2011-12-23T23:25:45.430 回答
0

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

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

于 2016-12-10T22:47:53.293 回答