php 服务器推送问题。 现在准备做个聊天的功能,在网上看了下,说用 推技术啊。但是不懂。用ajax 轮询的话 效率很低啊 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 server push需要浏览器支持,不是所有浏览器都支持的 ie吧,新版那些不知道server push是网景时代的产物,ns/ff应该支持 ajax效率低的问题可以找ajax manager优化,不过好像是个要$的咚咚 我之前搜索过一个comet的例子,用ie6和ff测试可以实现推效果,不知道跟2楼说的是否同一样技术? 额我始终觉得 ajax 长轮询的话 服务器压力很大啊。如果用户多了就 。。 做多点触发,AJAX的话,比较耗资源了。 二年前我问过同样问题,不想用ajax的话,用flash吧,这个相对于浏览器插件的支持度是最广的,如果不是什么大公司,很难投入大量的带宽去支持你的ajax轮询,flash相对成本较少。那个什么comet只是一个概念。 那个推技术,如果单指推, 比ajax轮询更低效,要服务器向你客户端推送? 那定时或按时推的程序要在服务器上运行不会浪费资源吗?如果把定时拿内容程序放在客户端就是轮询了。 FLASH比较强悍!而且它在这方面的性能远强过其他WEB方式。但是HTML5出来以后,也许这个格局会有所改变! 这是一个误区!要在浏览器上实现 server push 需要建立 http 协议的长连接。由于 http 协议是无状态协议,就是说一旦会话结束就断开连接。因此要建立 http 协议的长连接,就要保证会话永不结束。要是少数用户还好说,对于成千上万的用户而言,占用的带宽就可想而知了ajax 轮询只不过是局部刷新,只是时效性差些,对服务器不会构成威胁flash 是用 tcp/ip 和 udp 协议实现广播和点对点通讯,实际上已离开了web的范畴。当然也不失为一种强悍的手段 人少的时候,ajax轮循明显浪费资源,没新的聊天信息却在那边一直查啊查的。人多的时候,comet建了比较多的长连接,估计有点难承受,主要是服务器那边的优化了。这边是简单的例子……只是讲讲原理……前端是普通的ajax,后端是死循环<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head><body><div id="test"></div><script type="text/javascript">function test(){ var aj; try{aj=new ActiveXObject("Msxml2.XMLHTTP");} catch(e){ try{aj=new ActiveXObject("Microsoft.XMLHTTP");} catch(E){aj=false;} } var time = Math.round(new Date().getTime() / 1000); if(!aj&&typeof XMLHttpRequest!=undefined)aj=new XMLHttpRequest(); aj.open("GET","b.php?time="+time,true); aj.setRequestHeader('Content-Type','application/x-www-form-urlencoded;charset=utf-8'); aj.onreadystatechange=function(){ if(aj.readyState==4&&aj.status==200){ document.getElementById("test").innerHTML += aj.responseText; test(); // 收到结果后重新建立连接 } } aj.send(null);}test();</script></body></html>$file = 'test.txt';$js_time = !empty($_GET['time']) ? intval($_GET['time']) : 0; // a.html所传入的访问时间$file_time = filemtime($file); // 文件的修改时间while($file_time <= $js_time){ // 用户在逗留的时间内,文件没修改过,一直死循环 usleep(10000); // 让CPU休息会 clearstatcache(); // 清除文件状态缓存 $file_time = filemtime($file); // 更新文件时间}$info = file_get_contents($file);echo $info; 我刚刚上人人网,看那个聊天的 貌似就是推过来的感觉。主要是聊天的时候 他会局部刷新下,会看到url地址。不知道这是不是推送技术 聊天室这种东西 貌似用java来做比较妥. 如果是打算开发比较专业性的聊天室的话就得考虑其他方案了. 用nginx comet模块,单机支持几万连接没问题。再大就erlang,千万级长连接轻松搞定。 php扩展mbstring的问题 php缩略图生成,内存不足 谁可以帮我解释下 为什么php没有返回值啊 求一个正则表达式: 除【A或C或N】开头,后接【M或N或K】这样的字母序列 apache 的虚拟主机配置的问题! 我对数组理解德不好,大家帮忙分析一下! PHP如何抓取网页面数据 并存入数据库中~~? 高手看过来:如何让一台服务器上生成的WEB页面及时更新到20多台web服务器上,给点思路吧! 如果去掉html代码自动回车后的<br /> 什么样的parse error即使把代码注释掉,还是能显示错误? php mysql 遍历所有表的所有字段 php插入数据的问题
server push是网景时代的产物,ns/ff应该支持
如果用户多了就 。。
如果不是什么大公司,很难投入大量的带宽去支持你的ajax轮询,flash相对成本较少。那个什么comet只是一个概念。
那定时或按时推的程序要在服务器上运行不会浪费资源吗?
如果把定时拿内容程序放在客户端就是轮询了。
要在浏览器上实现 server push 需要建立 http 协议的长连接。
由于 http 协议是无状态协议,就是说一旦会话结束就断开连接。因此要建立 http 协议的长连接,就要保证会话永不结束。要是少数用户还好说,对于成千上万的用户而言,占用的带宽就可想而知了ajax 轮询只不过是局部刷新,只是时效性差些,对服务器不会构成威胁flash 是用 tcp/ip 和 udp 协议实现广播和点对点通讯,实际上已离开了web的范畴。当然也不失为一种强悍的手段
人多的时候,comet建了比较多的长连接,估计有点难承受,主要是服务器那边的优化了。这边是简单的例子……只是讲讲原理……
前端是普通的ajax,后端是死循环
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div id="test"></div>
<script type="text/javascript">
function test(){
var aj;
try{aj=new ActiveXObject("Msxml2.XMLHTTP");}
catch(e){
try{aj=new ActiveXObject("Microsoft.XMLHTTP");}
catch(E){aj=false;}
}
var time = Math.round(new Date().getTime() / 1000);
if(!aj&&typeof XMLHttpRequest!=undefined)aj=new XMLHttpRequest();
aj.open("GET","b.php?time="+time,true);
aj.setRequestHeader('Content-Type','application/x-www-form-urlencoded;charset=utf-8');
aj.onreadystatechange=function(){
if(aj.readyState==4&&aj.status==200){
document.getElementById("test").innerHTML += aj.responseText;
test(); // 收到结果后重新建立连接
}
}
aj.send(null);
}
test();
</script>
</body>
</html>$file = 'test.txt';
$js_time = !empty($_GET['time']) ? intval($_GET['time']) : 0; // a.html所传入的访问时间
$file_time = filemtime($file); // 文件的修改时间
while($file_time <= $js_time){ // 用户在逗留的时间内,文件没修改过,一直死循环
usleep(10000); // 让CPU休息会
clearstatcache(); // 清除文件状态缓存
$file_time = filemtime($file); // 更新文件时间
}
$info = file_get_contents($file);
echo $info;
主要是聊天的时候 他会局部刷新下,会看到url地址。
不知道这是不是推送技术