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

标签 php mysql database api request

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

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

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

最佳答案

使用 cron 作业每 30 秒从服务器提取一次数据,并删除对每个请求进行双重检查的部分。如果您已经有一个 cron 作业来执行此操作,那么这是多余的。

Here's something.

编辑

如果 crons 不是一个选项,您可以尝试使用文件锁。

这个想法是,当发出请求时,您会对文件系统中的文件加锁,并在请求完成后取消锁定。每次发出请求时,检查文件是否被锁定,如果是,则意味着其他人当前正在触发该请求,可以安全地跳过。如果文件已解锁,您可以在其中存储当前时间戳并检查该时间戳是否早于 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..

关于PHP 检查对其他服务器的请求是否正在运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26367257/

相关文章:

database - 从 Delphi XE2 高效访问各种 DBMS

javascript - PHP 脚本仅从 MySQL 数据库中获取地址字段的第一行

php - 在不知道日期格式的情况下验证日期

php - 使用 MySQL 选择查询时出现问题

database - 使用临时备份表时保持一致性

mysql - 使用 WHERE 和 GroupBy 在子查询 SELECT 语句中计数

phpDocumentor 如何记录字符串参数的可用选项

c# - 如何只获取日期的年份和月份部分进行比较?

php - 将来自数据库的 UTF-8 字符串与输入字符串进行比较 (PHP/SQL)

php - 函数内有两个 WHILE - 没有执行一个