我实现了一种非常简单和懒惰的方法,通过ajax在服务器中通过间隔请求数据实时影响。
但是我想选择长轮询/彗星技术,因为他们鼓励服务器在有一个而不是客户端不断拉动时推送数据,即使没有。
我完全理解长轮询和彗星工作的方式。但我希望看到服务器在有数据发送到客户端时推送的编码部分。
很久以前客户端发出的请求(长轮询)如何才能在有数据时推送服务器?我不明白这一部分。有人可以在编码中显示吗?
目前我通过ajax检查间隔中的新数据。现在,如何在没有客户端要求的数据的情况下自动返回服务器时,如何修改它以实现长轮询?
(function notify(){
$.each(id, function(k, v){
jQuery.ajax({
method: "POST",
url: "/notification.php",
"data": v,
error: function() {
reject('error');
},
success: function(result) {
console.log(result.data);
}
});
})
setTimeout(function(){
notify();
}, 1000);
})()
由于此问题标记为重复:
我说我完全理解长轮询和彗星的概念。我在这里不是要理解这个概念,而是为了实际实现这个概念的代码!
答案 0 :(得分:0)
最后我在这里找到了答案:
http://www.zeitoun.net/articles/comet_and_php/start
我选择了网站中给出的第二个例子:经典ajax彗星 它就像魅力一样。下面是jquery中index.html(客户端页面)的代码也来自网站..
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Comet demo</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- <script type="text/javascript" src="prototype.js"></script> -->
<script type="text/javascript" src="jquery.js"></script>
</head>
<body>
<div id="content"></div>
<div style="margin: 5px 0;">
<form id="cometForm" action="javascript:void(0);" method="get">
<input id="word" type="text" name="word" value=""/>
<input type="submit" name="submit" value="Send"/>
</form>
</div>
<script type="text/javascript">
(function($){
function handleResponse(response){
$('#content').append('<div>' + response['msg'] + '</div>');
}
var timestamp = 0;
var url = './chat_backend.php';
var noerror = true;
var ajax;
function connect() {
ajax = $.ajax(url, {
type: 'get',
data: { 'timestamp' : timestamp },
success: function(transport) {
eval('var response = '+transport);
timestamp = response['timestamp'];
handleResponse(response);
noerror = true;
},
complete: function(transport) {
(!noerror) && setTimeout(function(){ connect() }, 5000) || connect();
noerror = false;
}
});
}
function doRequest(request) {
$.ajax(url, {
type: 'get',
data: { 'msg' : request }
});
}
$('#cometForm').on('submit', function(){
doRequest($('#word').val());
$('#word').val('');
return false;
});
$(document).ready(function(){
connect();
});
})(jQuery);
</script>
</body>
</html>