我是Comet编程的新手。我搜索并编写了这样的代码
<script type="text/javascript" charset="utf-8">
function waitForMsg(){
$.ajax({
type: "GET",
url: "getMessage.php",
async: true,
cache: false,
timeout:50000,
success: function(data){
$('#messages).append(data);
setTimeout(
'waitForMsg()',
1000
);
},
error: function(XMLHttpRequest, textStatus, errorThrown){
addmsg("error", textStatus + " (" + errorThrown + ")");
setTimeout(
'waitForMsg()',
"15000");
},
});
};
$(document).ready(function(){
waitForMsg();
});
</script>
当我将消息传递给getMessage.php时,我从getMessage.php获取更新
但我怀疑是否使用了
setTimeout('waitForMsg()',1000);
这意味着什么。如果我们每1秒调用 waitForMsg()那么 Ajax 和 Comet 编程之间有什么区别。
答案 0 :(得分:1)
关于您的示例,Ajax和Comet之间的区别取决于getMessage.php如何响应来自客户端的请求。
使用 Ajax ,即使没有要返回的新消息,getMessage.php也会立即返回。然后,客户端将等待指定的间隔,然后发送另一个请求,再次接收新消息或根本不发送任何消息。最终结果是客户端将使用新消息更新的最快速度是指定的时间间隔。
另一方面,使用 Comet ,getMessage.php在返回之前不会返回。对客户端的初始请求有意义,它将检查新消息,如果没有可用,它将睡眠一段时间并再次检查。此过程将持续到新消息可用或发生超时,此时客户端将向服务器发送另一个请求并重新开始该过程。在这种情况下,最终结果是客户端似乎立即更新。
答案 1 :(得分:0)
有多种COMET。您正在使用AJAX polling,但还有其他技术,例如forever-frame,不涉及轮询。
Forever-frame使用隐藏的无限长iframe,服务器会根据需要推送script
个标记。
另请注意,AJAX轮询的某些用法(例如维基百科所解释的)不包含setTimeout
,因为它们会立即在成功处理程序中启动新的AJAX请求。
另外(使用AJAX轮询示例),您可以使用:
setTimeout(waitForMsg, 1000);
不需要字符串。