php弹幕技术轮询,PHP+Ajax实现在线聊天长轮询
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实现在线聊天长轮询相关推荐
- 多个ajax分别实现实现长轮询,ajax长轮询、轮询应用和介绍
####什么是轮询 轮询是指客户端定时向服务器发送ajax请求,服务器接到请求后马上返回响应信息并关闭连接. ####轮询的简单实现 仅仅是说出定义来,好像很模糊,代码更加直观一些,下面就简单写一下轮 ...
- YShout一款PHP+TXT+Ajax嵌入式在线聊天室源码
简介: YShout是一款PHP+TXT+AJAX开发嵌入式在线聊天室源码,UTF-8编码. 可以非常方便的嵌入到的你的网站中,无需数据库,采用TXT存储数据,小巧灵活,移植方便.采用AJAX技术,增 ...
- 用记事本编写ajax,用记事本轻松制作ajax+xml在线聊天室
欢迎来到vincent的多人聊天室 a:link{ color:#FFF; text-decoration:none; } a:hover{ color:yellow; text-decoration ...
- Ajax轮询,Ajax长轮询和websockte
http协议介绍: http协议是请求响应式的,每个http相应都对应一个http请求,http协议是没有状态的,多个http协议之间是没有关系的. http协议的被动性:在标准的http语义中,浏览 ...
- ajax长轮询tornado,Tornado长轮询和WebSocket
Http协议是一种请求响应式协议, 不允许服务端主动向客户端发送信息. 短轮询是一种简单的实现服务端推送消息的解决方案, 客户端以一定间隔自动向服务端发送刷新请求, 服务端返回要推送的消息作为响应. ...
- tomcat 轮询_用Spring长轮询Tomcat
tomcat 轮询 就像喜剧演员弗兰基· 豪威尔 ( Frankie Howerd)所说的"噢,小姐小姐" ,但足够多的英国影射和双重诱惑,因为长轮询Tomcat对隔壁的闷气不是某 ...
- 用Spring长轮询Tomcat
就像喜剧演员弗兰基· 豪威尔 ( Frankie Howerd)所说的"哦,小姐小姐" ,但足够多的英国影射和双重诱惑,因为长轮询雄猫对隔壁的闷气不是某种性偏见,这是一种技术(或更 ...
- mysql长轮询_ajax的轮询和长轮询
概念: 轮询(polling):客户端按规定时间定时像服务端发送ajax请求,服务器接到请求后马上返回响应信息并关闭连接. 概念总是枯燥的,只有代码方能解心头之快 前段代码:index.html: v ...
- 用了这么久配置中心,还不知道长轮询是什么?
前言 传统的静态配置方式想要修改某个配置时,必须重新启动一次应用,如果是数据库连接串的变更,那可能还容易接受一些,但如果变更的是一些运行时实时感知的配置,如某个功能项的开关,重启应用就显得有点大动干戈 ...
最新文章
- http工具类(支持https,连接池和失败重试)
- 启明云端分享| 图文+实操+视频,手把手教你Eclipse搭建esp-idf环境
- python webqq机器人_python模拟开发WebQQ(二)
- 简述JQuery,Extjs,YUI,Prototype,Dojo等JS框架的区别和应用场景
- 字节跳动 计算机视觉方向算法实习生 招聘!
- 常微分方程第三版_常微分方程:(第六章)非线性微分方程:5节
- 虚拟机+centOS挂载ISO步骤
- 第二十四课、布局管理器(三)
- soundpool android,android – 如何获取Soundpool的持续时间
- elementUI Cascader 级联选择器 拼音模糊搜索
- html文字段落i排版,i排版怎么修改字体?i排版字体排版详细介绍
- java开发常用排名前16的Java工具类
- mac android studio keymap,Android Studio keymap for Mac
- arcgis python实例_科学网—ArcGIS,Python,网络数据集中查询两点最短路径 - 余露的博文...
- c语言 cdma编码正交的8位码片,关于码分多址CDMA正交码片序列的进一步说明
- SAP ABAP 自动批量开关账期程序 OB52和MMPV
- excel表格末尾添加一行_在EXCEL表格中,快速插入多行、多列的技巧
- 如何用matlab对信号进行傅里叶变换
- 当出现程序包XXX不存在的时候,解决方案
- ASPICE SWE3之——模型生成软件详细设计1 配置
热门文章
- 图像处理与图像识别笔记(五)图像增强2
- python刷题+leetcode(第三部分)
- windows网络版象棋的实现
- 小甲鱼 OllyDbg 教程系列 (十一) : inline patch ( 内嵌补丁 )
- 台湾计算机读研,台湾省计算机考研_会考教育名副其实
- html 添加窗口小部件,如何:为自定义窗口小部件定义主题(样式)项
- C语言学习及应用笔记之一:C运算符优先级及使用问题
- 硬盘突然提示没有初始化_新硬盘的分区
- error:java:无效的源发行版_IDEA java出现无效的源发行版14解决方案_java
- 审计日志_Oracle审计日志过大?如何清理及关闭审计机制?