博客列表 >PHP+Ajax实现在线聊天功能

PHP+Ajax实现在线聊天功能

The Wolf Of Faith
The Wolf Of Faith原创
2017年07月29日 16:39:14945浏览

软件描述
HTML
首先我们放置一个获取数据按钮和数据存放地方#msg。

<div id="msg"></div>
<input id="btn" type="button" class='btn' value="获取数据" />
jQuery

我们向ajax.php请求,请求的时间设置80秒。在这80秒中若没有从服务端返回‘success’则一直保持连接状态,直到有数据返回或‘success’的值为0才关闭连接。在关闭连接后在继续下一次的请求。

$(function() {
   $("#btn").bind("click", {
       btn: $("#btn")
   },
   function(evdata) {
       $.ajax({
           type: "POST",
           dataType: "json",
           url: "ajax.php",
           timeout: 80000,//ajax请求超时时间80秒
           data: {
               time: "80"
           },
           //40秒后无论结果服务器都返回数据
           success: function(data, textStatus) {
               //从服务器得到数据,显示数据并继续查询
               if (data.success == "1") {
                   $("#msg").append("<br>[有数据]" + data.text);
                   evdata.data.btn.click();
               }
               //未从服务器得到数据,继续查询
               if (data.success == "0") {
                   $("#msg").append("<br>[无数据]");
                   evdata.data.btn.click();
               }
           },
           //Ajax请求超时,继续查询
           error: function(XMLHttpRequest, textStatus, errorThrown) {
               if (textStatus == "timeout") {
                   $("#msg").append("<br>[超时]");
                   evdata.data.btn.click();
               }
           }
       });
   });

Ajax.php
通过$_POST['time']来限制循环的超时时间,避免资源过度浪费。要注意的是浏览器不关闭的话,会一直请求下去......

if(empty($_POST['time']))exit();
set_time_limit(0);//无限请求超时时间
$i=0;
while (true){
   //sleep(1);
   usleep(500000);//0.5秒
   $i++;

   //若得到数据则马上返回数据给客服端,并结束本次请求
   $rand=rand(1,999);
   if($rand<=15){
       $arr=array('success'=>"1",'name'=>'xiaocai','text'=>$rand);
       echo json_encode($arr);
       exit();
   }

   //服务器($_POST['time']*0.5)秒后告诉客服端无数据
   if($i==$_POST['time']){
       $arr=array('success'=>"0",'name'=>'xiaocai','text'=>$rand);
       echo json_encode($arr);
       exit();
   }
}
大家可以利用这种长轮询(COMET)方式,做一个在线聊天系统,若是成功的话,你肯定会觉得小有成就呢!~

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议