2011-12-21 37 views
1

我正在构建使用Blekko API(Web搜索API)的Web应用程序。 应用程序是多用户的。安排API调用1秒限制

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

我需要一些sugesstions如何做到这一点?

+0

由一个工人放到一个队列中并处理它所有的疑问 – zerkms 2011-12-21 20:08:16

+0

你想阻止API调用发布速度超过1秒或排队他们执行他们在每秒1? – VNO 2011-12-21 20:08:28

+0

我想排队他们执行他们在1每秒。 – 2011-12-21 20:10:53

回答

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

0

一个简单的方法来做到这一点是使用usleep()

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