gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 23:36:09 25 4
gpt4 key购买 nike

我正在开发一个使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com