jQuery和PHP实现Ajax长轮询的组合(LongPoll)
传统的ajax轮询方法是在用户定义的时间间隔上查询服务器上的最新数据,拉数据的方式需要很短的时间间隔来保证数据的准确性,但时间间隔太短,客户服务端会在短时间内向服务器发送多个请求。
反向Ajax被称为长轮询或彗星,服务器和客户服务端需要维护一个长时间请求,它允许服务器在有数据时将消息返回给客户机。
XHTML
jQuery
Ajax请求data.php页用在这里得到价值的成功,和请求的时间为80秒,这80秒,如果成功不是返回服务器端,连接状态一直保持到数据返回值或成功接近0。下一个请求继续关闭连接后。
$(函数(){())
$(# BTN)。Bind(单击
$ ajax({
类型:邮政
DataType:JSON
URL
超时:80000,80秒的Ajax请求超时
数据:{80},在40秒之后,无论结果服务器返回数据
成功:功能(数据,textstatus){
获取服务器上的数据并显示数据查询
如果(数据=1){
$(#味精)。追加({资料}+数据。文本);
Evdata.data.btn.click();
}
没有从服务器获取查询数据
如果(数据=0){
$(#味精)。追加({没有数据} );
Evdata.data.btn.click();
}
},
ajax请求超时,继续查询
错误:函数(XMLHttpRequest,textstatus,errorthrown){
如果(textstatus = =超时){
$(#味精)。追加({暂停} );
Evdata.data.btn.click();
}
}
});
});
});
PHP
这里是一个无限循环,循环的结尾是返回结果返回到JSON数据。
接受_post美元{时间}参数限制超时时间周期,避免过度浪费资源。(浏览器关闭将不发送消息到服务器,使用可循环的时间)
如果(emptyempty($ _post {时间' }))出口();
set_time_limit(0); / /无限的请求超时
$ I = 0;
当(真){
睡眠(1);
Usleep(500000); / / 0.5秒
美元+;
如果数据是立即将数据返回给客户端,以及请求的结尾
兰特=兰德(1999);
如果($ < = 15){
$ ARR =阵列(''成功' = > 1
回声json_encode($ ARR);
出口();
}
/ /服务器($ _post {时间}×0.5)秒结束后告诉客户服务数据
如果(我= = $ _post {时间' }){
$ ARR =阵列(''成功' = > 0
回声json_encode($ ARR);
出口();
}
}
运行结果:在图中,您可以看到没有数据的请求时间是40多个,如果在40年代请求得到数据,请求就关闭了。