我正在进行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;
}
?>
提前感谢任何人!
使用MySQL事件调度程序。
下面的链接将引导您完成。
http://www.9lessons.info/2012/10/mysql-event-scheduler.html.
我认为对你们来说是最好的选择。
(function check() {
$.get('mypage.php', function(data) {
doSomethingWith(data);
setTimeout(check, 5000); // every 5 seconds
});
})();
PHP没有setInterval函数。虽然我确信您可以使用crontask在服务器上实现自动化,但您也可以使用一些简单的Javascript来实现这一点。
您试图实现的概念被称为"短轮询"。您想要做的是在Javascript中有一个setInterval
函数,该函数不断向您的PHP文件发出AJAX请求,该文件执行对数据库的新消息检查。PHP应该将这些信息返回到脚本中,然后可以简单地填充用户的屏幕。
还有Long Polling,您只需维护连接并使用setTimeout
等待消息传入。您可以自己查找更多信息,如果有问题,可以返回此处。
一个关于这个的好视频:
https://www.youtube.com/watch?v=wHmSqFor1HU
希望这能有所帮助。
这正是您所需要的。我们需要设置ajax自动重新加载的时间。不要把所有东西都放在一页纸上。因为必须重新加载页面才能刷新数据。这是一个糟糕的解决方案。
调用jQuery Ajax Request Each X Minutes
等待30秒,并每秒检查数据库,一旦你发现一条记录正在被破坏,当30秒到期时也会被破坏。
$sec = 1;
while($sec <= 30) {
if(has record)
Send to the user;
$sec++;
sleep(one sec here);
}
使用睡眠10秒,以便每10秒检查一次。。。