我看56秀那个聊天就是即时的, 而且就是网页, 没用flash.突然发这个贴的时候想到一个方法, 后台不断的ajax获取数据就行了, 因为服务器可以写个专门的页面, 只处理新的数据, 数据量不大, 客户端用JavaScript显示上去. 刷新率可以做的很快, 比如几秒. 不知道这个方案是否可行. 不过56那个网页聊天看上去就是即时的, 不知道它是用的哪个技术.

解决方案 »

  1.   

    据听说有可能是ajax从后台取  同问吧
      

  2.   

    有一种是Java做服务器的, 使用一个长连接, 流媒体方式传输数据.刚刚发现 PHP也支持socket.
      

  3.   

    有一个思路, PHP也是能输出流的, 把文本作为流输出, 客户端用ajax获取这些数据流, 然后再转成文本输出, 就可以做到实时.不过实际上服务端还是要有个刷新过程, 看是否有新数据要输出. 不过比ajax刷新要效率高得多, 省去头数据了. 因为每次刷新, 数据可能就几条或者大多为空.
      

  4.   

    这是我写的代码, 测试可行, 浏览器是chrome.
    ajax = function(method, url, data) {
    var objxml = jsuse.createXMLHttpRequest(); //自己写这个函数, 我使用了一个库.
    if (url.indexOf("http://") != 0) {
    url = jsuse.BASE_URL + url;
    }
    objxml.open(method, url, true); //异步调用
    objxml.setRequestHeader("Content-type", "application/x-octet-stream");
    var pos = 0;
    objxml.onreadystatechange = function() {
    if (objxml.readyState == 4) {
    if (objxml.status == "200") {
    document.write("200 OK");
    } else {
    //document.write(objxml.status);
    }
    } else if(objxml.readyState == 3) {
    var str = objxml.responseText;
    document.write(str.substr(pos));
    pos = str.length;
    } else {
    document.write(objxml.readyState+"<br />");
    }
    }
    try {
    objxml.send(data);
    } catch (e) {
    return false;
    }
    return true;
    }
    jsuse(function(){
    ajax("post","test.php",""); //这一句会在onLoad里加载, 可以写在body的onLoad里.
    });
    PHP页面
    set_time_limit(0); //设置页面永不超时
    for($i=0;$i<3000;$i++){ //先把浏览器缓冲清掉, 不同浏览器这个值不同.
    echo " ";
    }
    ob_implicit_flush(true); //设置PHP实时输出
    $n = 0;
    while(true) {
      echo "$n yeah :-))))<br />";
      @ob_flush();//刷新缓冲.
      sleep(1);
      $n++;
    }测试可以连续实时的输出.上面代码有个问题, ajax取的数据会持续增大, 应该达到一个值, 重新连接一次. 服务器端也要有具体控制数据的方法.