AJax技术

php+ajax实现长轮询(Comet)

字号+ 作者:H5之家 来源:H5之家 2018-04-22 11:19 我要评论( )

所谓ajax长轮询,简单说就是客户端发起ajax请求,服务端会挂起该请求(通过循环),直到条件触发使服务器返回,在服务器返回前客户端一直处于pending,等待服务

所谓ajax长轮询,简单说就是客户端发起ajax请求,服务端会挂起该请求(通过循环),直到条件触发使服务器返回,在服务器返回前客户端一直处于pending,等待服务器返回。

ajax长轮询可以减少客户端的无用请求,不过服务端的压力会大一些。另外可以采用推送,不过兼容性会差些,有些浏览器不支持websocket。

下面的代码可实现Comet:

服务端代码:

<?php //server.php 服务端 set_time_limit(0); $filename = './data.txt'; //模拟新消息到来 if (!empty($_GET['m'])) { file_put_contents($filename, $_GET['m']); exit(0); } $old = filemtime($filename); $cur = filemtime($filename); while ( $cur <= $old) { usleep(500000);//休息500ms clearstatcache(); $cur = filemtime($filename); } echo file_get_contents($filename) ?>

客户端代码:

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <script src="../jquery/jquery-1.9.0.min.js"></script> <title>ajax</title> </head> <body> <button id="click1">click1</button> <script> var sending=false; $(function(){ $("#click1").click(function(){ $.ajax({ type:"POST", url:"server.php", timeout:0, beforeSend:function(){ if (sending) { return false; } sending = true; }, data:"username=eddy&password=123456", success:function(data){ alert(data); }, error:function(data){ ; }, complete:function(){ sending=false; $("#click1").click(); } }); }); }); </script> </body> </html>

点击click1按钮,发起请求,等待服务端返回(新消息到来)。此时可通过访问 /server.php?m=1234568798798000 模拟消息到达,消息到达服务端返回数据,客户端弹出消息内容。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 静态页中利用AJAX实现无刷新页面

    静态页中利用AJAX实现无刷新页面

    2018-04-22 08:00

  • 《贵州工业大学学报(自然科学版)》2007年02期

    《贵州工业大学学报(自然科学版)》2007年02期

    2018-04-21 18:02

  • ajax接收后台数据在html页面显示

    ajax接收后台数据在html页面显示

    2018-04-21 14:01

  • 采用DWR框架和反向AJAX的Web监控系统开发

    采用DWR框架和反向AJAX的Web监控系统开发

    2018-04-21 10:04

网友点评