如何在无限循环中每 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 时才执行(和回显)操作 - 进入无限循环
在 do while 循环内部,我想在 c# 中每 1 分钟执行一次特定代码,直到条件满足