一周的搜索和查找后发现,关于从数据库表中实现长轮询(long polling)而非来自名为data.text的纯文本文件的教程屈指可数。目前,我手动将任何内容写入data.text并立即在浏览器中显示。
这是一个问题:使用数据库进行长轮询?即便是在StackOverflow上也没有得到恰当的回答。(在这里我找到了很多,但都无济于事。)这方面的示例也在此处提供:filemtime alternative for MySQL 如何修改getdata.php以使其能够从数据库中获取数据?
这是一个问题:使用数据库进行长轮询?即便是在StackOverflow上也没有得到恰当的回答。(在这里我找到了很多,但都无济于事。)这方面的示例也在此处提供:filemtime alternative for MySQL 如何修改getdata.php以使其能够从数据库中获取数据?
$sql=mysqli_query($database,"SELECT * FROM messages where time>=$curr_date ORDER by time DESC");
while($row=mysqli_fetch_array($sql)){
$messages=$row['messages'];
$id=$row['id'];
echo $messages;
}
以下是消息表
id fro to mesg time status last_modified
我这里举一个例子。 在这个例子中,使用了三个文件。
- index.html
- getdat.php
- data.text
如果不需要创建第四个文件来从数据库(mysql)获取数据,那么需要对getdata.php或data.text做哪些更改才能使用动态数据呢?
下面是我的Javascript代码:
<script type="text/javascript" charset="utf-8">
var timestamp = null;
function waitformsg() {
$.ajax({
type:"Post",
url:"getdata.php?timestamp="+timestamp,
async:true,
cache:false,
success:function(data) {
var json = eval('(' + data + ')');
if(json['msg'] != "") {
$("#messages").append(json['msg']);
}
timestamp = json["timestamp"];
setTimeout("waitformsg()", 1000);
},
error:function(XMLhttprequest, textstatus, errorthrown) {
alert("error:" + textstatus + "(" + errorthrown + ")");
setTimeout("waitformsg()", 15000);
}
});
}
$(document).ready(function() {
waitformsg();
});
</script>
这是getdata.php文件
<?php
include("../model/includes/classes.php");
$filename='data.php';
$lastmodif=isset($_GET['timestamp'])?$_GET['timestamp']:0;
$currentmodif=filemtime($filename);
while($currentmodif<=$lastmodif){
usleep(10000);
clearstatcache();
$currentmodif=filemtime($filename);
}
$response=array();
$response['msg']=file_get_contents($filename);
$response['timestamp']=$currentmodif;
echo json_encode($response);
?>