php javascript comet
简单描述:
comet是用ajax实现的服务器推送,有两种实现comet的方式,长轮询和流,这里只实现长轮询。
长轮询的过程:页面发起一个服务器请求,然后服务器一直保持连接打开,直到有数据返回。返回数据之后浏览器关闭连接,随即又发起另一个服务器请求。这一过程在页面打开期间一直保持连续不断。
这种方式节省带宽,并且递归请求(有顺序),跟普通轮询无序相比好很多。
testPush.html,内容如下
简单描述:
comet是用ajax实现的服务器推送,有两种实现comet的方式,长轮询和流,这里只实现长轮询。
长轮询的过程:页面发起一个服务器请求,然后服务器一直保持连接打开,直到有数据返回。返回数据之后浏览器关闭连接,随即又发起另一个服务器请求。这一过程在页面打开期间一直保持连续不断。
这种方式节省带宽,并且递归请求(有顺序),跟普通轮询无序相比好很多。
testPush.html,内容如下
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
<html> <head> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script type="text/javascript" src="jquery.min.js"></script> <script type="text/javascript"> $(function () { (function longPolling() { alert(Date.parse(new Date())/1000); $.ajax({ url: "testPush1111.php", data: {"timed": Date.parse(new Date())/1000}, dataType: "text", timeout: 5000,//5秒超时,可自定义设置 error: function (XMLHttpRequest, textStatus, errorThrown) { $("#state").append("[state: " + textStatus + ", error: " + errorThrown + " ]<br/>"); if (textStatus == "timeout") { // 请求超时 longPolling(); // 递归调用 } else { // 其他错误,如网络错误等 longPolling(); } }, success: function (data, textStatus) { $("#state").append("[state: " + textStatus + ", data: { " + data + "} ]<br/>"); if (textStatus == "success") { // 请求成功 longPolling(); } } }); })(); }); </script> </head> <body> <div id="state"></div> </body></html> |
testPush.php,内容如下
测试分析
会有几种情况:
1.成功返回,状态码200,然后再次发起长连接
2.超时,取消(canceled)这次长连接,然后再次发起长连接
3.长连接等待中(pending),待服务器响应
testPush.php,内容如下
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<?phpif(!$_GET['timed']) exit();date_default_timezone_set("PRC");set_time_limit(0);//无限请求超时时间 $timed = $_GET['timed'];while (true) { sleep(3); // 休眠3秒,模拟处理业务等 $i = rand(0,100); // 产生一个0-100之间的随机数 if ($i > 20 && $i < 56) { // 如果随机数在20-56之间就视为有效数据,模拟数据发生变化 $responseTime = time(); // 返回数据信息,请求时间、返回数据时间、耗时 echo ("result: " . $i . ", response time: " . $responseTime . ", request time: " . $timed . ", use time: " . ($responseTime - $timed)); exit(); } else { // 模拟没有数据变化,将休眠 hold住连接 sleep(13); exit(); }} |
测试分析
会有几种情况:
1.成功返回,状态码200,然后再次发起长连接
2.超时,取消(canceled)这次长连接,然后再次发起长连接
3.长连接等待中(pending),待服务器响应
php javascript comet的更多相关文章
- 浅入浅出“服务器推送”之一:Comet简介
最近有个项目,其中有项需求要从服务器端主动向客户端推送数据,本以为很简单,但在实际做的过程中发现很棘手,并没有想象中的简单.从网上搜索学习,发现主流讲的还是Ajax的长轮询技术或者流技术,websoc ...
- 反向Ajax,实现服务器向客户端推送消息之 Comet
基于 HTTP 长连接.无须在浏览器端安装插件的“服务器推”技术为“Comet”. 下面将介绍两种 Comet 应用的实现模型. 基于 AJAX 的长轮询(long-polling)方式 AJAX 的 ...
- Comet:基于 HTTP 长连接的“服务器推”技术
“服务器推”技术的应用 请访问 Ajax 技术资源中心,这是有关 Ajax 编程模型信息的一站式中心,包括很多文档.教程.论坛.blog.wiki 和新闻.任何 Ajax 的新信息都能在这里找到. c ...
- Comet技术详解:基于HTTP长连接的Web端实时通信技术
前言 一般来说,Web端即时通讯技术因受限于浏览器的设计限制,一直以来实现起来并不容易,主流的Web端即时通讯方案大致有4种:传统Ajax短轮询.Comet技术.WebSocket技术.SSE(Ser ...
- comet
comet 1.简介: 基于 HTTP长连接的“服务器推”技术,是一种新的 Web 应用架构,基于这种架构开发的应用中,服务器端会主动以异步的方式向客户端程序推送数据,而不需要客户端显式的发出请求.C ...
- 转载:Comet:基于 HTTP 长连接的“服务器推”技术
转自:http://www.ibm.com/developerworks/cn/web/wa-lo-comet/ 很多应用譬如监控.即时通信.即时报价系统都需要将后台发生的变化实时传送到客户端而无须客 ...
- polling轮询和comet
comet:(原意:彗星) Comet is a web application model in which a long-held(held:保留) HTTP request allows a w ...
- [转载] Comet:基于 HTTP 长连接的“服务器推”技术
转载自http://www.ibm.com/developerworks/cn/web/wa-lo-comet/ “服务器推”技术的应用 传统模式的 Web 系统以客户端发出请求.服务器端响应的方式工 ...
- 初识Comet技术
一.服务器推送技术概述 服务器推送技术(Servers Push)的基础思想是将浏览器主动查询信息改为服务器主动发送信息.服务器发送一批数据,浏览器显示这些数据,同时保证与服务器的连接.当服务器需要再 ...
随机推荐
- Host is not allowed to connect to this MySQL server---------------->windows10
错误,数据库无法远程连接. 第一步,关闭本地防火墙 注意: 两台连接的机器都需要关闭 第二步,两台机器互相ping,看是否可以互相访问 丢失为零,意为可以连接. 第三步登录数据库 第四步,切换,数据库 ...
- 第22章:MongoDB-聚合操作--聚合管道--$out
①$out $out:利用此操作可以将查询结果输出到指定的集合里面. ②范例:将投影的结果输出到集合里
- 剑指offer42:不用加减乘除做加法
分析: (1)十进制加法分三步:(以5+17=22为例) 1. 只做各位相加不进位,此时相加结果为12(个位数5和7相加不进位是2,十位数0和1相加结果是1): 2. 做进位,5+7中有进位,进位的值 ...
- Effective C++ 随笔(3)
条款12: 以对象管理资源 两种只能指针: std:auto_ptr<> 当使用copy操作室,原先的智能指针指向为null std:tr1:share_ptr<int> sp ...
- VMware Workstation “以独占方式锁定此配置文件失败。可能其它正在运行VMware进程在使用此配置文件”
VMware Workstation客户机异常关闭之后,再启动时提示“以独占方式锁定此配置文件失败...”. 解决方法: 进入客户机的安装目录(注意,非VMware的安装目录),删除所有后缀为lck的 ...
- Zookeeper C++编程实战之主备切换
默认zookeeper日志输出到stderr,可以调用zoo_set_log_stream(FILE*)设置输出到文件中还可以调用zoo_set_debug_level(ZooLogLevel)控制日 ...
- 基于脚本的nodemanager管理器
Step 6: Configure Node Manager on the Managed Servers虚拟机环境: 管理服务器IP:192.168.227.10 AdminServer 受管服务 ...
- Java图形处理
paint.repaint.update方法 Graphics类. 用于实现组件的画图.包括组件对象,坐标,区域,颜色,字体,画图模式等 Color类 用来封装颜色 Gra ...
- C++指针二(易错模型)
规则一:Main(主调函数)分配的内存(在堆区,栈区.全局区)都可以在被调用函数里使用.如果在被调用函数里面的临时区(栈)分配内存,主调用函数是不能使用的. #include "stdio. ...
- 中国剩余定理 (POJ 1006)
http://poj.org/problem?id=1006 在<孙子算经>中有这样一个问题:“今有物不知其数,三三数之剩二(除以3余2),五五数之剩三(除以5余3),七七数之剩 ...