- 浏览: 592343 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
kangh:
转载的也拿出来 都不试一下 完全错误
Nginx+ffmpeg的HLS开源服务器搭建配置及开发详解 -
wangtxlz:
#cd builders/cmake#cmake .系统提示命 ...
crtmpserver流媒体服务器的介绍与搭建 -
hnraysir:
支持支持支持
手机Android音视频采集与直播推送,实现单兵、移动监控类应用 -
wuent:
把web服务器和php框架绑定到一起?真不建议这样。。。
Swoole(PHP高级Web开发框架) -
wuent:
有更详细的性能比较吗?php,python,java
PHP中的(伪)多线程与多进程
最近一直关注COMET推技术,现在已经应用很普遍了
比如renren,新浪微博,都用到了COMET技术
大部分使用java实现的,下面是用PHP实现的原理
原理:利用htmlfile这个ActiveX,往页面上放一个iframe,设置它的src为请求的地址。
1.我们需要一个持久链接的HTTP请求
2.需要一个加载javascript的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
41
42
43
44
45
46
47
|
<?php header( "Cache-Control: no-cache, must-revalidate" );
header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" );
flush();
<head>
<title>Comet php backend</title>
<meta http-equiv= "Content-Type" content= "text/html; charset=utf-8" />
</head>
<body>
<script type= "text/javascript" >
// KHTML browser don't share javascripts between iframes
var is_khtml = navigator.appName.match( "Konqueror" ) || navigator.appVersion.match( "KHTML" );
if (is_khtml)
{
var prototypejs = document.createElement('script ');
prototypejs.setAttribute(' type ',' text/javascript ');
prototypejs.setAttribute(' src ',' prototype.js ');
var head = document.getElementsByTagName(' head ');
head[0].appendChild(prototypejs);
}
// load the comet object
var comet = window.parent.comet;
</script>
<?php
while(1) {
echo ' <script type= "text/javascript" > ';
echo ' comet.printServerTime( '.time().' ); ';
echo ' </script>';
flush(); // used to send the echoed data to the client
sleep(1); // a little break to unload the server CPU
}
?>
</body>
</html>
<BR type= "_moz" >
|
创建客户端脚本
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
var comet = {
connection : false ,
iframediv : false ,
initialize: function () {
if (navigator.appVersion.indexOf( "MSIE" ) != -1) {
// For IE browsers
comet.connection = new ActiveXObject( "htmlfile" );
comet.connection.open();
comet.connection.write( "<html>" );
comet.connection.write( "<script>document.domain = '" +document.domain+ "'" );
comet.connection.write( "</html>" );
comet.connection.close();
comet.iframediv = comet.connection.createElement( "div" );
comet.connection.appendChild(comet.iframediv);
comet.connection.parentWindow.comet = comet;
comet.iframediv.innerHTML = "<iframe id='comet_iframe' src='./backend.php'></iframe>" ;
} else if (navigator.appVersion.indexOf( "KHTML" ) != -1) {
// for KHTML browsers
comet.connection = document.createElement( 'iframe' );
comet.connection.setAttribute( 'id' , 'comet_iframe' );
comet.connection.setAttribute( 'src' , './backend.php' );
with (comet.connection.style) {
position = "absolute" ;
left = top = "-100px" ;
height = width = "1px" ;
visibility = "hidden" ;
}
document.body.appendChild(comet.connection);
} else {
// For other browser (Firefox...)
comet.connection = document.createElement( 'iframe' );
comet.connection.setAttribute( 'id' , 'comet_iframe' );
with (comet.connection.style) {
left = top = "-100px" ;
height = width = "1px" ;
visibility = "hidden" ;
display = 'none' ;
}
comet.iframediv = document.createElement( 'iframe' );
comet.iframediv.setAttribute( 'src' , './backend.php' );
comet.connection.appendChild(comet.iframediv);
document.body.appendChild(comet.connection);
}
},
// this function will be called from backend.php
printServerTime: function (time) {
$( 'content' ).innerHTML = time;
},
onUnload: function () {
if (comet.connection) {
comet.connection = false ; // release the iframe to prevent problems with IE when reloading the page
}
}
}
Event.observe(window, "load" , comet.initialize);
Event.observe(window, "unload" , comet.onUnload);
|
学习资料:
Comet:基于 HTTP 长连接的“服务器推”技术
http://www.ibm.com/developerworks/cn/web/wa-lo-comet/
How to implement COMET with PHP
http://www.zeitoun.net/articles/comet_and_php/start
发表评论
-
nginx、php-fpm默认配置与性能–TCP socket还是unix domain socket
2015-04-02 11:14 1418前几天看到一篇博客,提到php所在服务器在大并发情况下,频 ... -
使用socket方式连接Nginx优化php-fpm性能
2015-04-01 13:49 0Nginx连接fastcgi的方式有 ... -
PHP中include和require的区别详解
2015-04-01 08:32 01、概要 require()语句的性能与includ ... -
PHP 中cookie 和 session 的分析
2015-03-31 12:33 0HP 中cookie 和session 的分析 ... -
php 经典的算法题你懂的
2015-03-31 12:31 0有5个人偷了一堆苹果,准备在第二天分赃。晚上,有一人遛出来, ... -
PHP最常用的2种设计模式工厂模式和单例模式介绍
2015-03-31 12:26 0简单来说,PHP单例模式就是一个功能用一个类来实现,并且在整 ... -
PHP 数据类型
2015-03-31 12:23 0PHP 数据类型 PHP 支持八种原始类型(type)。 ... -
PHP mcrypt启用、加密以及解密过程详解
2015-03-30 11:32 1422Mcrypt扩展库可以实现加密解密功能,就是既能将明文加密, ... -
PHP扩展实现类扩展
2015-03-27 14:08 536在第一篇文章中,我们所开发的扩展是单个函数,本篇文章看一下 ... -
PHP高级工程师的面试题
2015-03-06 10:35 01. 基本知识点 HTTP协议中几个状态码的含义:1x ... -
PHP面试中常见的面试试题与算法例子
2015-03-05 14:14 0下面是四道比较常见的题目,主要考察的是对字符串函数以及文件操 ... -
PHP实现四种常用的排序算法
2015-03-05 14:09 0插入排序(Insertion Sort),选择排序(Sele ... -
用swagger-php/ui做API测试
2015-02-13 09:46 3607功能: 1 swagger-php根据自定义的规则生成API ... -
app后端设计(0)--总目录
2015-01-23 18:03 0做了3年app相关的系统架构,api设计,先后在3个创业公司中 ... -
PHP中eAccelerator、memcached、xcache、APC 4个加速、缓存扩展的区别
2015-01-23 10:26 876这篇文章主要介绍了PHP ... -
PHP内核探索:zend_parse_parameters函数
2015-01-16 14:14 908最简单的获取函数调用者传递过来的参数便是使用zend_pars ... -
实战:用C写php扩展(二)
2015-01-16 11:05 946一、前言 在我的上一篇文章“实战:用C写php扩展(一)”里介 ... -
实战:用C写php扩展(一)
2015-01-16 11:04 9811、 前言 首先,确保你的机器安装了apache和php。假 ... -
JavaScript or PHP 来检测移动设备
2014-09-22 10:04 593iPhone & iPod Detection T ... -
YII Framework学习教程-YII的Modules(模块化)
2014-08-27 11:04 711一个相对来说大的项目。如果按照yii生成的 ...
相关推荐
(2)基于Ajax推送Ajax主要是基于浏览器发送异步请求,提高用户操作的响应性 (1)基于 AJAX 的长轮询方式长轮询:HTTP的连接保持,服务器端会阻塞请
Comet:基于 HTTP 长连接的“服务器推”技术
Comet:基于_HTTP_长连接的“服务器推”技术 Comet:基于_HTTP_长连接的“服务器推”技术 Comet:基于_HTTP_长连接的“服务器推”技术 简介
NULL 博文链接:https://justcoding.iteye.com/blog/1497445
Comet:基于HTTP长连接的“服务器推”技术[收集].pdf
C#实现基于http长连接“服务器推”-Comet技术 很多应用譬如监控、即时通信、即时报价系统都需要将后台发生的变化实时传送到客户端而无须客户端不停地刷新、发送请求。 本项目基于 AJAX 的长轮询方式实现。 ...
这个项目是基于tomcat,comet4j的技术来实现推送消息到web页面,可以直接导入,直接运行的,里面包含了项目所需要的comet4j-tomcat7.jar(tomcat7的就导入这个),comet4j.js(页面引入这个js),等jar包,对于想要学习...
基于pushlet实现的comet技术的服务器推技术。新增了接口和实现类,可直接调用点对点,群发等功能。注意Session类当中create方法中王hashtable当中存入当前登录用户id和sessionid键值对。启动后会发现的。
随着互联网技术的快速发展,基于B/S架构的实时通讯和消息推送的应用范围越来越广泛,服务器消息推送是很多应用中的一项重要功能,服务器推送技术的优劣直接影响着消息推送的效率。传统的解决方案有html refresh,...
为解决风险预警系统因传统web系统请求/响应模式而造成信息延迟的问题,本文提出了一种基于web服务器主动推送技术的风险预警系统的的方案,并阐述了此方案的关键技术以及具体实现。本风险预警方案通过使用基于HTTP长...
CometServer V2:允许Web服务器将数据推送到浏览器用php编写的Comet应用程序(也称为“推送服务器”),它使用Ajax和技术,这是最流行的技术。 它提供了一种简单的方法,允许http服务器将数据推送到浏览器,而无需...
.5 英文第十一章 Javascript的数据通信基于服务器端推送事件的Comet技术
这两种技术都是基于请求-应答模式,都不算是真正意义上的实时技术;它们的每一次请求、应答,都浪费了一定流量在相同的头部信息上,并且开发复杂度也较大。 伴随着HTML5推出的WebSocket,真正实现了Web的实时通信,...
Lightstreamer”系列的演示是非常基本的示例,我们将交替的字符串“Hello”和“World”,后跟当前时间戳,从服务器推送到浏览器。 该项目包括“Hello World”教程的 Web 客户端前端:一个简单的 HTML 页面,显示...
18.3 基于服务器端推送事件的Comet技术 第19章 jQuery类库 19.1 jQuery基础 19.2 jQuery的getter和setter 19.3 修改文档结构 19.4 使用jQuery处理事件 19.5 动画效果 19.6 jQuery中的Ajax 19.7 工具函数 19.8 jQuery...
18.3 基于服务器端推送事件的Comet技术 第19章 jQuery类库 19.1 jQuery基础 19.2 jQuery的getter和setter 19.3 修改文档结构 19.4 使用jQuery处理事件 19.5 动画效果 19.6 jQuery中的Ajax 19.7 工具函数 19.8 jQuery...