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 数据库是不是有任何新行的主要内容,如果未能解决你的问题,请参考以下文章
我们如何在 jQuery/php/mySQL 中显示最近的通知?