如何在无限循环中每 3 分钟回显一次?

Posted

技术标签:

【中文标题】如何在无限循环中每 3 分钟回显一次?【英文标题】:How to echo something every 3 minutes while in an endless loop? 【发布时间】:2015-01-23 12:22:59 【问题描述】:

我有一个使用while(true) 运行的脚本,所以它会一直运行直到它死掉。

我希望能够让它每 3 分钟发送一次消息并在每次断开连接时重新连接,我该怎么做?

脚本在使用 php 托管的 Jabber 服务器上运行,因此令人困惑,而且我不知道如何让它每 3 分钟执行一次并在断开连接时自动重新连接,因为如果我使用的是 sleep() 或 @ 987654323@ 脚本会堆叠,脚本自动回复消息不会运行。

那我该怎么做呢?有人可以帮助我吗?

try 
  while(!$this->disconnect()) 
    $this->connect();
    while(!$this->isDisconnected()) 
      $starts = $this->processUntil(array('message', 'session_start'));
      foreach($starts as $go) 
        $new = $go[1];
        switch($go[0]) 
          case 'session_start':
            break;
          case 'message':
            $filter = $show="online";
            if($new['from'] == $filter) 
              $sender = explode('@', $new['from']);
              $this->message($new['from'], $body="Auto Respond Message: Sorry $sender[0] Iam Not Here Right Now", $type="chat");
            
            $the_time = time();
            $interval = 3*60;
            while(true) 
              if ($the_time + $interval >= time()) 
                $this->message($myself, $body="PING !!!", $type="chat");
                $the_time = time();
              
              $this->presence($status="ONLINE !!!", $show="online");
            
            break;
        
      
    
  
 catch(XMPPHP_Exception $e) 
  die($e->getMessage());

【问题讨论】:

也许你正在寻找flush() 【参考方案1】:

使用睡眠功能: http://php.net/manual/en/function.sleep.php

// sleep for 30 seconds
sleep(30);

【讨论】:

如果我使用 sleep(180) 或 usleep(180000000),自动回复消息脚本将不会运行。顺便说一句,我已经尝试过了。 你确定你的脚本没有因为超时而被杀死吗? 是的,兄弟。如果脚本可以每 3 分钟发送一次 PING 消息。因为基本上是自动回复消息的脚本。 我认为我得到了你正在寻找的东西。我相信你应该寻找另一种方法。一旦收到消息/消息,您必须调用此函数,而不是保持此脚本处于唤醒状态(使用 sleep 或其他东西)。我是对的【参考方案2】:

试试这样的:

<?php

while (@ob_end_flush());
try 
    while (!$this->disconnect()) 
        $this->connect();
        while (!$this->isDisconnected()) 
            $starts = $this->processUntil(array('message', 'session_start'));
            foreach ($starts as $go) 
                $new = $go[1];
                switch ($go[0]) 
                    case 'session_start':
                        break;
                    case 'message':
                        $filter = $show = "online";
                        if ($new['from'] == $filter) 
                            $sender = explode('@', $new['from']);
                            $this->message($new['from'], $body = "Auto Respond Message: Sorry $sender[0] Iam Not Here Right Now", $type = "chat");
                        
                        $the_time = time();
                        $interval = 3 * 60;
                        while (true) 
                            if ($the_time + $interval >= time()) 
                                $this->message($myself, $body = "PING !!!", $type = "chat");
                                ob_flush();
                                flush();
                                $the_time = time();
                            
                            $this->presence($status = "ONLINE !!!", $show = "online");
                        
                        break;
                
            
        
    
 catch (XMPPHP_Exception $e) 
    die($e->getMessage());
 

【讨论】:

还是没有让脚本每3分钟发送一次PING消息兄弟,但是谢谢。【参考方案3】:

使用循环并在睡眠中回显您的文本;

// sleep for 20 seconds
while( true )

   echo "text here!";
   sleep(20);

它将在 1 分钟内回显文本 3 次。

【讨论】:

【参考方案4】:

你可以使用 sleep();

echo $statement1;
sleep(180);
echo $statement2;

【讨论】:

OP明确表示他不能使用睡眠

以上是关于如何在无限循环中每 3 分钟回显一次?的主要内容,如果未能解决你的问题,请参考以下文章

PHP - 仅当余数为 0 时才执行(和回显)操作 - 进入无限循环

Mqtt无限循环

如何保护C文件在ubuntu中进入无限循环

在 do while 循环内部,我想在 c# 中每 1 分钟执行一次特定代码,直到条件满足

如何解决WIN10系统的电脑一开机就提示“你的电脑将在一分钟后重启”并无限循环

如何在3次请求后中断此Javascript HTTP无限请求循环?