PHP+Ajax实现在线聊天长轮询

PHP+Ajax实现在线聊天长轮询

HTTP是无状态、单向的协议,用户只能够通过客服端向服务器发送请求并由服务器处理发回一个响应。通过长轮询,你可轻松实现在线聊天功能。

淘建站为您提供更多_其它特效_Ajax_ajax_长轮询,在此特别感谢您对我们的支持与厚爱!

查看演示

演示不了,点击反馈

加入收藏

下载 481 次

下载资源

34 积分

特别说明:本站资源来自网友发布分享,仅供学习与参考,请勿用于商业用途,若有侵权请联系删除(272966172@qq.com)。
分类:其它特效 > Ajax 难易程度:高级

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)方式,做一个在线聊天系统,若是成功的话,你肯定会觉得小有成就呢!~

声明:本资料由淘建站会员提供,如转载注明来源,资料来源淘建站免费素材库:https://www.taojz.cn/texiao/80.html
PHP+Ajax实现在线聊天长轮询 希望对你有帮助,感谢您的支持!
  • jQuery validate 表单验证,AJAX, POST,...

    jQuery validate 表单验证,AJAX, POST,...

  • html仿QQ聊天网页

    html仿QQ聊天网页

  • jquery仿QQ在线聊天界面交谈工具代码源码下载

    jquery仿QQ在线聊天界面交谈工具代码源码下载

  • ajax多图和文件上传

    ajax多图和文件上传

  • PHP+Ajax+Mysql+jeditable无刷新编辑表格

    PHP+Ajax+Mysql+jeditable无刷新编辑表格

  • html5仿手机微信聊天界面代码

    html5仿手机微信聊天界面代码

  • jquery.loading网页进度条加载插件ajax加载进度条特效下载

    jquery.loading网页进度条加载插件ajax加载进度条特效下载

  • jquery ajax实例点击按钮触发Ajax loading加...

    jquery ajax实例点击按钮触发Ajax loading加...

  • jQuery paginate分页导航插件ajax分页代码

    jQuery paginate分页导航插件ajax分页代码

  • jquery ajax仿十月妈咪官网点击地图上面的城市显示商家

    jquery ajax仿十月妈咪官网点击地图上面的城市显示商家

  • ajax点击地图显示商家网点分布

    ajax点击地图显示商家网点分布

  • jquery layer弹出层在线聊天工具代码

    jquery layer弹出层在线聊天工具代码

  • 留言(0)
    头像
     阿里云限量代金券,戳我领取
    1 2