gpt4 book ai didi

php - 每秒调用一个 PHP 函数

转载 作者:可可西里 更新时间:2023-10-31 22:13:59 24 4
gpt4 key购买 nike

有没有办法定期执行一个函数?

我有一个数据库表,我需要知道何时添加或删除条目。我尝试使用的逻辑是 Ajax 调用服务器,但服务器不会立即响应,而是连续检查 30 秒是否更新了数据库,如果是,则只有它才响应,否则它会在 30 秒后响应。通过这种方式,我试图通过每秒调用 Ajax 请求来最小化服务器上​​的负载。

我该怎么做?使用 while 循环有意义吗?像这样的事情可能是——

while (SomeCondition)
{
if (CheckIfDatabaseChanged())
{
echo "System Updated";
break;
}
}

如果这是一个没有意义的解决方案,那么我如何确保循环只运行 30 秒然后中断。或者有更好的解决方案吗?

最佳答案

您正在考虑的是一种叫做长轮询的东西,它在 PHP 上的扩展性不好,尤其是当您使用阻塞 IO 时。

参见 https://stackoverflow.com/a/6488569/11926了解更多信息。

但是你的代码可能看起来像这样

set_timeout_limit(31);
$i=0;
while ($i<30) {
// poll database for changes which is a bad idea.
i = i + 1;
sleep(1); // sleep 1 second
}

我打赌你不能同时运行很多这些。我的建议是使用类似 redis 的东西。 pubsub通知数据库更改和某种长轮询/websocket 解决方案。

如果可能,您应该生成一个后台进程来订阅 数据库更改,然后将更改发布到pusher,例如,因为拥有多个长时间运行的进程对性能来说确实很糟糕.

您可以自己托管它们或使用托管服务,例如:

Redis:

长轮询/Websocket:

他们都有小型免费计划,可以帮助您入门,当您对这些计划规模太大时,您可以考虑自己托管这些解决方案。


P.S:我还在 PHP 中找到了一个非阻塞解决方案,称为 React .此解决方案可能会在 PHP 中扩展(更好)。

关于php - 每秒调用一个 PHP 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11153750/

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