我正在构建使用Blekko API(Web搜索API)的Web应用程序。 应用程序是多用户的。安排API调用1秒限制
我需要将对API的调用限制为1 [通话/秒]。 此限制应适用于所有用户的所有活动,即应该有一些使用API的时间表。
我需要一些sugesstions如何做到这一点?
我正在构建使用Blekko API(Web搜索API)的Web应用程序。 应用程序是多用户的。安排API调用1秒限制
我需要将对API的调用限制为1 [通话/秒]。 此限制应适用于所有用户的所有活动,即应该有一些使用API的时间表。
我需要一些sugesstions如何做到这一点?
听起来好像对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()调用如何。长时间运行的进程通常在共享服务器上被终止。
一个简单的方法来做到这一点是使用usleep()
usleep(1000000);
将脚本暂停1.0秒
由一个工人放到一个队列中并处理它所有的疑问 – zerkms 2011-12-21 20:08:16
你想阻止API调用发布速度超过1秒或排队他们执行他们在每秒1? – VNO 2011-12-21 20:08:28
我想排队他们执行他们在1每秒。 – 2011-12-21 20:10:53