HTML

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

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("
[有数据]" + data.text);

evdata.data.btn.click();

}

//未从服务器得到数据,继续查询

if (data.success == "0") {

$("#msg").append("
[无数据]");

evdata.data.btn.click();

}

},

//Ajax请求超时,继续查询

error: function(XMLHttpRequest, textStatus, errorThrown) {

if (textStatus == "timeout") {

$("#msg").append("
[超时]");

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

php弹幕技术轮询,PHP+Ajax实现在线聊天长轮询相关推荐

  1. 多个ajax分别实现实现长轮询,ajax长轮询、轮询应用和介绍

    ####什么是轮询 轮询是指客户端定时向服务器发送ajax请求,服务器接到请求后马上返回响应信息并关闭连接. ####轮询的简单实现 仅仅是说出定义来,好像很模糊,代码更加直观一些,下面就简单写一下轮 ...

  2. YShout一款PHP+TXT+Ajax嵌入式在线聊天室源码

    简介: YShout是一款PHP+TXT+AJAX开发嵌入式在线聊天室源码,UTF-8编码. 可以非常方便的嵌入到的你的网站中,无需数据库,采用TXT存储数据,小巧灵活,移植方便.采用AJAX技术,增 ...

  3. 用记事本编写ajax,用记事本轻松制作ajax+xml在线聊天室

    欢迎来到vincent的多人聊天室 a:link{ color:#FFF; text-decoration:none; } a:hover{ color:yellow; text-decoration ...

  4. Ajax轮询,Ajax长轮询和websockte

    http协议介绍: http协议是请求响应式的,每个http相应都对应一个http请求,http协议是没有状态的,多个http协议之间是没有关系的. http协议的被动性:在标准的http语义中,浏览 ...

  5. ajax长轮询tornado,Tornado长轮询和WebSocket

    Http协议是一种请求响应式协议, 不允许服务端主动向客户端发送信息. 短轮询是一种简单的实现服务端推送消息的解决方案, 客户端以一定间隔自动向服务端发送刷新请求, 服务端返回要推送的消息作为响应. ...

  6. tomcat 轮询_用Spring长轮询Tomcat

    tomcat 轮询 就像喜剧演员弗兰基· 豪威尔 ( Frankie Howerd)所说的"噢,小姐小姐" ,但足够多的英国影射和双重诱惑,因为长轮询Tomcat对隔壁的闷气不是某 ...

  7. 用Spring长轮询Tomcat

    就像喜剧演员弗兰基· 豪威尔 ( Frankie Howerd)所说的"哦,小姐小姐" ,但足够多的英国影射和双重诱惑,因为长轮询雄猫对隔壁的闷气不是某种性偏见,这是一种技术(或更 ...

  8. mysql长轮询_ajax的轮询和长轮询

    概念: 轮询(polling):客户端按规定时间定时像服务端发送ajax请求,服务器接到请求后马上返回响应信息并关闭连接. 概念总是枯燥的,只有代码方能解心头之快 前段代码:index.html: v ...

  9. 用了这么久配置中心,还不知道长轮询是什么?

    前言 传统的静态配置方式想要修改某个配置时,必须重新启动一次应用,如果是数据库连接串的变更,那可能还容易接受一些,但如果变更的是一些运行时实时感知的配置,如某个功能项的开关,重启应用就显得有点大动干戈 ...

最新文章

  1. http工具类(支持https,连接池和失败重试)
  2. 启明云端分享| 图文+实操+视频,手把手教你Eclipse搭建esp-idf环境
  3. python webqq机器人_python模拟开发WebQQ(二)
  4. 简述JQuery,Extjs,YUI,Prototype,Dojo等JS框架的区别和应用场景
  5. 字节跳动 计算机视觉方向算法实习生 招聘!
  6. 常微分方程第三版_常微分方程:(第六章)非线性微分方程:5节
  7. 虚拟机+centOS挂载ISO步骤
  8. 第二十四课、布局管理器(三)
  9. soundpool android,android – 如何获取Soundpool的持续时间
  10. elementUI Cascader 级联选择器 拼音模糊搜索
  11. html文字段落i排版,i排版怎么修改字体?i排版字体排版详细介绍
  12. java开发常用排名前16的Java工具类
  13. mac android studio keymap,Android Studio keymap for Mac
  14. arcgis python实例_科学网—ArcGIS,Python,网络数据集中查询两点最短路径 - 余露的博文...
  15. c语言 cdma编码正交的8位码片,关于码分多址CDMA正交码片序列的进一步说明
  16. SAP ABAP 自动批量开关账期程序 OB52和MMPV
  17. excel表格末尾添加一行_在EXCEL表格中,快速插入多行、多列的技巧
  18. 如何用matlab对信号进行傅里叶变换
  19. 当出现程序包XXX不存在的时候,解决方案
  20. ASPICE SWE3之——模型生成软件详细设计1 配置

热门文章

  1. 图像处理与图像识别笔记(五)图像增强2
  2. python刷题+leetcode(第三部分)
  3. windows网络版象棋的实现
  4. 小甲鱼 OllyDbg 教程系列 (十一) : inline patch ( 内嵌补丁 )
  5. 台湾计算机读研,台湾省计算机考研_会考教育名副其实
  6. html 添加窗口小部件,如何:为自定义窗口小部件定义主题(样式)项
  7. C语言学习及应用笔记之一:C运算符优先级及使用问题
  8. 硬盘突然提示没有初始化_新硬盘的分区
  9. error:java:无效的源发行版_IDEA java出现无效的源发行版14解决方案_java
  10. 审计日志_Oracle审计日志过大?如何清理及关闭审计机制?