PHP:每 10 秒检查一次 mysql 数据库是不是有任何新行

Posted

技术标签:

【中文标题】PHP:每 10 秒检查一次 mysql 数据库是不是有任何新行【英文标题】:PHP: Check mysql database every 10 seconds for any new rowsPHP:每 10 秒检查一次 mysql 数据库是否有任何新行 【发布时间】:2014-06-05 04:55:03 【问题描述】:

我正在进行 php 聊天并开始 php 检查数据库部分。因此,当用户在聊天中输入内容时,它会记录在 mysql 数据库中,我将如何每 10 秒检查一次数据库,以便一个用户的聊天会更新其他用户的新消息。我知道您可以对具有间隔的页面使用 ajax 请求,但我希望 php 位于同一页面上,而不必使用大量页面。这是检查数据库的代码

<?php
$con = mysqli_connect('host','user','pass','database');
$query = mysqli_query($con,"SELECT * FROM `messages`");
while ($row=mysqli_fetch_assoc($query)) 
 $user = $row['user'];
 $message = $row['message'];
 echo 'User: ',$user,' Message: ',$message;

?>

提前谢谢大家!

【问题讨论】:

我们也可以调用ajax到同一个页面 我认为 crontask 可能是一个解决方案 您可以尝试将 XMPP 用于 IM 类应用程序。看看this 【参考方案1】:

使用 MySQL 事件调度程序。

以下链接将引导您完成。

http://www.9lessons.info/2012/10/mysql-event-scheduler.html.

我认为你的情况是最好的选择。

【讨论】:

我认为他想要的是将数据从数据库自动更新到浏览器。 mysql调度器做不到。 然后使用 ajax 是选项。 你用mysql调度器干什么?我认为它用于我们想要维护数据库系统的情况,例如删除垃圾数据......在这种情况下,如果他要求他想删除超过 7 天的聊天消息,我们可以使用它。【参考方案2】:

AJAX 可能是最简单的解决方案。如果您真的愿意,您可以在执行 PHP 代码的同一页面上执行 AJAX 请求。

(function check() 
    $.get('mypage.php', function(data) 
        doSomethingWith(data);
        setTimeout(check, 5000); // every 5 seconds
    );
)();

【讨论】:

【参考方案3】:

PHP 没有 setInterval 函数。虽然我确信您可以使用 crontask 在服务器上自动执行它,但您也可以使用一些简单的 javascript 来实现。

您尝试实现的概念称为短轮询。您想要做的是在 Javascript 中有一个 setInterval 函数,该函数不断向您的 PHP 文件发出 AJAX 请求,该文件执行对数据库的新消息检查。您的 PHP 应该将该信息返回到您的脚本,然后您可以在其中简单地填充用户的屏幕。

还有长轮询,您只需保持连接并通过setTimeout 等待消息进入。您可以自己查找更多信息,如果您有任何问题,可以回到这里。

一个很好的视频:

https://www.youtube.com/watch?v=wHmSqFor1HU

希望这会有所帮助。

【讨论】:

其实借助一点JS,SSE就可以使用了。 developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/…【参考方案4】:

这就是你需要的。我们需要为 ajax 自动重新加载设置时间。不要把所有东西都放在一页上。因为您必须重新加载页面才能刷新数据。这是一个糟糕的解决方案。

Call jQuery Ajax Request Each X Minutes

【讨论】:

【参考方案5】:

一段时间30秒,每隔一秒检查一次db,一旦发现记录就被破坏,30秒过期也被破坏。

$sec = 1;
while($sec <= 30) 
   if(has record)
      Send to the user;
   $sec++;

   sleep(one sec here);

使用睡眠 10 秒以便每 10 秒检查一次...

【讨论】:

错误的解决方案,服务器将失去 30 秒来运行此代码。 确实如此,但不是要找到解决方案,我只是说一句,这怎么可能按照要求使用PHP。

以上是关于PHP:每 10 秒检查一次 mysql 数据库是不是有任何新行的主要内容,如果未能解决你的问题,请参考以下文章

让PHP文件每隔几秒执行一次

如何每隔N秒检查一次android中的Internet连接

如何切换输入单选按钮每 3 秒检查一次?

每隔10秒运行一次BAT文件?

使用jQuery计时器通过PHP检查数据库以获取新记录?

使用 jQuery 每 10 秒用 php 数据刷新一个 div