怎么在jquery + php下实现AJAX长轮询

  介绍

这篇文章主要讲解了“怎么在jquery + php下实现AJAX长轮询”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习”怎么在jquery + php下实现AJAX长轮询”吧!

HTTP是无状态,单向的协议,用户只能够通过客服端向服务器发送请求并由服务器处理发回一个响应。若要实现聊天室,WEBQQ,在线客服,邮箱等这些即时通讯的应用,就要用到“服务器推送技术(彗星)”。

传统的AJAX轮询方式,客服端以用户定义的时间间隔去服务器上查询最新的数据。种这种拉取数据的方式需要很短的时间间隔才能保证数据的精确度,但太短的时间间隔客服端会对服务器在短时间内发送出多个请求。

反转AJAX,就是所谓的长轮询或者彗星。服务器与客服端需要保持一条长时间的请求,它使得服务器在有数据时可以返回消息给客户端。

XHTML

<代码类=癶tml”> & lt; p id=癿sg"祝辞& lt;/p>,   & lt;输入id=癰tn"类型=癰utton"值=https://www.yisu.com/zixun/辈馐?/>

jQuery

这里使用AJAX请求数据。php页面获得“成功”的值,请求的时间达到80秒。在这80秒中若没有从服务端返回‘成功’则一直保持连接状态,直到有数据返回或“成功”的值为0才关闭连接。在关闭连接后在继续下一次的请求。

<代码类=" js "> $(函数(){   ,,美元(“# btn") .bind (“click", {btn: $ (“# btn")},函数(evdata) {,   ,,,,美元。ajax ({,   ,,,,,,,类型:“POST",大敌;;   ,,,,,,,,数据类型:“json",,   ,,,,,,,,url:“data.php",,   ,,,,,,,超时:80000年,大敌;,//ajax请求超时时间80秒,   ,,,,,,,,数据:{时间:“80”;},//40秒后无论结果服务器都返回数据,   ,,,,,,,,成功:功能(数据、textStatus) {,   ,,,,,,,,,,//从服务器得到数据,显示数据并继续查询,   ,,,,,,,,,,如果(data.success==?“) {,   ,,,,,,,,,,$ (“# msg") .append (“& lt; br>[有数据]“+ data.text);,   ,,,,,,,,,,evdata.data.btn.click ();,   ,,,,,,,,,}大敌;   ,,,,,,,,//未从服务器得到数据,继续查询,   ,,,,,,,,,,如果(data.success==?”) {,   ,,,,,,,,,,$ (“# msg") .append (“& lt; br>[无数据]“);,   ,,,,,,,,,,evdata.data.btn.click ();,   ,,,,,,,,,}大敌;   ,,,,,,,},大敌;   ,,,,,,//Ajax请求超时,继续查询,   ,,,,,,错误:功能(XMLHttpRequest, textStatus errorThrown) {,   ,,,,,,,,,,如果(textStatus==皌imeout") {,   ,,,,,,,,,,,,$ (“# msg") .append (“& lt; br>[超时)“);,   ,,,,,,,,,,,,evdata.data.btn.click ();,   ,,,,,,,,,,},   ,,,,,,},   ,,,,,,,,,   ,,,,,,});,   ,,});,   ,,,   });,

PHP

在这里是无限的循环,循环的结束条件就是获取到了返回结果返回Json数据。

并且接受$ _POST[& # 39;时间# 39;]参数来限制循环的超时时间,避免资源的过度浪费。(浏览器关闭不会发消息给服务器,使用可能一直循环下去)

<=癙HP代码类>如果(空($ _POST[& # 39;时间# 39;]))退出();,   set_time_limit(0);//无限请求超时时间,   $ i=0;,   而(真){,   ,,//睡眠(1);,   ,,usleep(500000);//0.5秒,   ,美元,我+ +;,   ,,,   ,,//若得到数据则马上返回数据给客服端,并结束本次请求,   ,美元,兰德=兰德(1999);,   ,,如果($ rand<=15) {,   ,,,,$ arr=数组(& # 39;成功# 39;=祝辞;“1“,& # 39;名字# 39;=祝辞& # 39;xiaocai& # 39;, & # 39;文本# 39;=祝辞兰德美元);,   ,,,美元,回声json_encode (arr);,   ,,,,退出();,   ,}大敌;   ,,,   ,,//服务器($ _POST[& # 39;时间# 39;)* 0.5)秒后告诉客服端无数据,   ,,如果($我==$ _POST[& # 39;时间# 39;)){,   ,,,,$ arr=数组(& # 39;成功# 39;=祝辞;“0“,& # 39;名字# 39;=祝辞& # 39;xiaocai& # 39;, & # 39;文本# 39;=祝辞兰德美元);,   ,,,美元,回声json_encode (arr);,   ,,,,退出();,   ,}大敌;   }   

运行效果:在图中可以看到无数据的请求时间达到40多岁了,在40年代的请求中若获得数据则请求关闭。

感谢各位的阅读,以上就是“怎么在jquery + php下实现AJAX长轮询”的内容了,经过本文的学习后,相信大家对怎么在jquery + php下实现AJAX长轮询这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

怎么在jquery + php下实现AJAX长轮询