【发布时间】:2016-12-27 08:14:01
【问题描述】:
我实现了一种非常简单和懒惰的方法,即通过 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);
})()
由于这个问题被标记为重复:
我说我完全理解长轮询和彗星的概念。我来这里不是为了理解这个概念,而是为了真正实现这个概念的代码!
【问题讨论】:
-
基本上服务器在数据可用之前不会响应。顺便说一句,普通的旧 PHP 真的不是为此而设计的,因为它不是真正可扩展的,你会很快用完所有资源。
-
@AlexanderO'Mara,我会确保我的服务器使用 php5 及更高版本。但是服务端是怎么响应的,能不能把伪代码展示一下?
-
它的响应和正常一样,只是在等待某事发生之后。此外,无论您使用的是 PHP 5 还是 7,在典型设置中,每个活动请求都需要一个 PHP 进程来运行。长轮询意味着每个请求都有一个 PHP 进程几乎一直处于空闲状态,这会很快消耗资源。
-
@AlexanderO'Mara,结论是?
标签: jquery ajax real-time comet long-polling