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

HTTP是无状态、单向的协议,用户只能够通过客服端向服务器发送请求并由服务器处理发回一个响应。通过长轮询,你可轻松实现在线聊天功能。
PHP+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)方式,做一个在线聊天系统,若是成功的话,你肯定会觉得小有成就呢!~


2020-02-06 上传

免责声明:本站所有素材资源均来自用户分享和网络收集,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服,我们核实后会立即删除。

thinkphp3.2加好友聊天源码
域名url转发
php+Ajax远程加载避免重复提交
Thinkphp+Ajax登录注册
php+Ajax无刷新分页
redis session共享类,拿着直接用(负载均衡)
thinkphp5开发restful API接口自动生成文档
PHP整蛊二维码生成器
上传头像带裁剪预览功能Flash版带在线拍照
PHP检测上传图片是否有木马
QQ钱包扫码支付源码
Thinkphp整合webupload多图片上传
PHP大转盘抽奖
Thinkphp5整合省市区镇村5级联动
Thinkphp5整合phpmailer发送邮件DEMO和源码
PHP仿淘宝商品多规格属性
PHP在线制作文字表情吸引粉丝源码
Thinkphp朋友圈吸引粉丝图片生成器
PHP识别支付宝二维码推广链接
输入名字生成新年祝福源码
PHP生成微信小程序二维码三种方法
PHP看图答题测试
thinkphp5 workerman在线聊天室
PHP弹出滑块拖动验证码
多图上传带简易php后台代码
PHP仿12306图片验证码
Thinkphp说说留言无限回复
php+mysql+dropload上拉刷新+下拉加载
php列表页筛选功能
OSS同步工具
PHP扫到什么评论什么朋友圈吸引粉丝裂变源码
thinkphp生成带二维码的活动海报
PHP各大音乐平台API接口
PHP仿京东幸运大转盘抽奖
jQuery+php+ajax带进度条无刷新上传文件代码
PHP+jQuery+html5实现图片选取裁剪上传(兼容手机上传)
PHP+Jcrop+artDialog头像上传
PHP+Ajax实现在线聊天长轮询
holy荷勒

这个人很懒,什么都没留下。

热门资源
QQ在线咨询