加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

每秒调用一次PHP函数

发布时间:2020-12-13 17:41:52 所属栏目:PHP教程 来源:网络整理
导读:有没有办法定期执行一个函数? 我有一个数据库表,我需要知道何时添加或删除条目.我试图使用的逻辑是Ajax调用Server,但不是立即响应,如果数据库更新,服务器会持续检查30秒,如果是,则只有它响应,否则它会在30秒后响应.这样我试图通过每秒调用Ajax请求来最小化
有没有办法定期执行一个函数?

我有一个数据库表,我需要知道何时添加或删除条目.我试图使用的逻辑是Ajax调用Server,但不是立即响应,如果数据库更新,服务器会持续检查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这样的东西来通知db更改和某种长轮询/ websocket解决方案.

如果可能,您应该生成后台进程以订阅数据库更改,然后将更改发布到pusher,例如,因为有多个长时间运行的进程对性能非常不利.

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

Redis的:

> http://redistogo.com

长轮询/ Websocket:

> http://pusher.com

他们都有小的免费计划可以让你开始,当你对这些计划变得太大时,你可以考虑为自己托管这些解决方案.

P.S:我还在PHP中找到了一个名为React的非阻塞解决方案.这个解决方案可能在PHP中扩展(更好).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读