PHP检查请求其他服务器是否正在运行

时间:2014-10-14 17:59:15

标签: php mysql database api request

我正在使用一个使用API​​的应用程序。我被允许每分钟只向服务器发出2个请求。所以我使用自己的服务器,每分钟获取数据2次,我的应用程序从我的服务器请求数据 我的服务器上有一个数据库,它存储了我需要的数据。因此,如果用户需要在智能手机或平板电脑上显示数据,它会从我的服务器获取数据。

我有一个PHP脚本,用于检查我的数据库中的最新条目是否超过30秒,如果是,脚本将从API服务器获取当前数据并将其存储到我的数据库中。

但现在,如果有例如1000个用户和每个人同时请求当前数据 - 脚本被称为千次,如果我的数据库中的数据超过30秒,它从API服务器获取数据 - 我的服务器是否向API服务器,只要当前数据在我的数据库中不可用?我担心我超过了2个请求/分钟。

1 个答案:

答案 0 :(得分:0)

使用cron作业每30秒从服务器中提取一次数据,并删除每次请求重复检查的部分。如果你已经有一个cron工作,这是多余的。

Here's something.

修改

如果没有选项,您可以尝试使用文件锁。

我们的想法是,在发出请求时,您会锁定文件系统中的文件,并在请求完成后取消锁定。每次发出请求时,请检查文件是否已锁定,如果是,则表示其他人当前正在触发请求,并且可以安全跳过。如果文件已解锁,您可以在其中存储当前时间戳,并检查该时间戳是否超过30秒。

// get current time by reading the file. You will need to create the file manually initially with the timestamp in it
$last_run = file_get_contents('foo.txt');

// open the file
$fp = fopen("foo.txt", "w");

// check if file is locked
if (flock($fp, LOCK_EX | LOCK_NB)) {

    // check that it's been more than 30 seconds
    if($last_run > (time() - 30)){

        // if file is unlocked update it with current timestamp
        $fwrite($fp, time());

        // make request to server, upload to db

        // after request has been made, unlock the file
        flock($fp, LOCK_UN);

    }

} else {

    // someone else is triggering the request, get data from db

}

Here's something else..