现在准备做个聊天的功能,在网上看了下,说用 推技术啊。
但是不懂。用ajax 轮询的话 效率很低啊

解决方案 »

  1.   

    server push需要浏览器支持,不是所有浏览器都支持的
      

  2.   

    ie吧,新版那些不知道
    server push是网景时代的产物,ns/ff应该支持
      

  3.   

    ajax效率低的问题可以找ajax manager优化,不过好像是个要$的咚咚
      

  4.   

    我之前搜索过一个comet的例子,用ie6和ff测试可以实现推效果,不知道跟2楼说的是否同一样技术?
      

  5.   

    额我始终觉得 ajax 长轮询的话 服务器压力很大啊。
    如果用户多了就 。。
      

  6.   

    做多点触发,AJAX的话,比较耗资源了。
      

  7.   

    二年前我问过同样问题,不想用ajax的话,用flash吧,这个相对于浏览器插件的支持度是最广的,
    如果不是什么大公司,很难投入大量的带宽去支持你的ajax轮询,flash相对成本较少。那个什么comet只是一个概念。
      

  8.   

    那个推技术,如果单指推, 比ajax轮询更低效,要服务器向你客户端推送?  
    那定时或按时推的程序要在服务器上运行不会浪费资源吗?
    如果把定时拿内容程序放在客户端就是轮询了。
      

  9.   

    FLASH比较强悍!而且它在这方面的性能远强过其他WEB方式。但是HTML5出来以后,也许这个格局会有所改变!
      

  10.   

    这是一个误区!
    要在浏览器上实现 server push 需要建立 http 协议的长连接。
    由于 http 协议是无状态协议,就是说一旦会话结束就断开连接。因此要建立 http 协议的长连接,就要保证会话永不结束。要是少数用户还好说,对于成千上万的用户而言,占用的带宽就可想而知了ajax 轮询只不过是局部刷新,只是时效性差些,对服务器不会构成威胁flash 是用 tcp/ip 和 udp 协议实现广播和点对点通讯,实际上已离开了web的范畴。当然也不失为一种强悍的手段
      

  11.   

    人少的时候,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;
      

  12.   

    我刚刚上人人网,看那个聊天的 貌似就是推过来的感觉。
    主要是聊天的时候 他会局部刷新下,会看到url地址。
    不知道这是不是推送技术
      

  13.   

    聊天室这种东西 貌似用java来做比较妥. 如果是打算开发比较专业性的聊天室的话就得考虑其他方案了.
      

  14.   

    用nginx comet模块,单机支持几万连接没问题。再大就erlang,千万级长连接轻松搞定。