【问题标题】:How do i run a php script every second?我如何每秒运行一个 php 脚本?
【发布时间】:2012-02-09 11:38:09
【问题描述】:

我目前正在编写一个在线游戏。现在我必须检查事件是否发生(检查数据库中的时间戳)并根据它执行一些操作。我必须每秒检查一次事件。

我想使用 cronjob,但使用 cron 你只能每分钟运行一次脚本。

我的想法是在我的 php 脚本中使用 cron 和循环 60 次。但我认为这不是最好的解决方案。

那么每秒运行脚本的最佳方式是什么?

【问题讨论】:

  • cron 每秒?你想达到什么目的?你应该告诉我们你为什么要这样做?至于cron,最小间隔是1分钟。
  • 我认为您正在寻找错误的解决方案来解决您的问题,这似乎需要一种与您习惯完全不同的架构。你想完成什么?
  • 好的,那么可能会发生什么样的事件呢?需要立即采取行动的事情?在那种情况下,PHP 并不是真正适合该项目的语言。或者只是用户下次联系服务器时会看到的东西?那么就没有必要实际上每秒都这样做了。

标签: php loops


【解决方案1】:

为什么不修改脚本让它每秒重复一次代码呢?这将减少解析开销并且不那么复杂。

【讨论】:

    【解决方案2】:

    您可能应该运行一次脚本,然后使用一个有延迟的循环来完成您想要的时间。 附带的好处是效率更高,您只需打开资源(即数据库)一次。

    【讨论】:

      【解决方案3】:

      你不应该想要这个:P。没有主机会接受您的 cronjob 每分钟每秒都在运行? 您可以将运行时间保存在数据库中,下次运行时计算两次运行之间的时间并进行所需的计算。每一秒都是一个非常糟糕的主意。

      【讨论】:

        【解决方案4】:

        我寻找了一个更好的解决方案,但似乎我的第一个想法,干净的代码,是最好的解决方案。

        这是我当前的代码:

        <?php
        set_time_limit(60);
        $start = time();
        
        for ($i = 0; $i < 59; ++$i) {
            // Do whatever you want here
            time_sleep_until($start + $i + 1);
        }
        ?>
        

        【讨论】:

          【解决方案5】:
          $total_time = 0;
          $start_time = microtime(true);
          while($total_time < 60)
            {
                  //DoSomethingHere;
              echo $total_time."\n";
              //sleep(5);
            $total_time =  microtime(true) - $start_time ;
            } 
          

          在 crontab 中添加它以每分钟运行一次。

          【讨论】:

            猜你喜欢
            • 2010-12-16
            • 2013-02-23
            • 1970-01-01
            • 2018-03-06
            • 1970-01-01
            • 1970-01-01
            • 2016-07-24
            • 2022-01-11
            • 2018-09-24
            相关资源
            最近更新 更多