請問有沒有php服務推送到客戶端的例子?建立長連接,用iframe接收數據好,還是ajax接收好?

解决方案 »

  1.   

    至于用哪个好,我用的是ajax+setTimeout,我感觉都差不多,至少效果上看不出上面差异来
      

  2.   

    在本地測試運行的時候,如果同時請求兩個或以上push.php,在chrome瀏覽器會等待一個完成,再運行下一個,IE瀏覽器就會同時運行,請問什麽原因?我想同時請求多個push.php,同時運行push.phpsession_start();
    session_write_close();
    $time=time();
    while(1){
    sleep(1);
    if($sss=getsql()){
    echo $sss;
    break;
    }else if(@file_get_contents(session_id().'.txt')!=$time){
    echo 'no';
    break;
    }else if(time()-$time>=30){
    echo 'no';
    break;
    }
    }客戶端接收數據或超時,客戶端再ajax請求一次
    如果用iframe接收的話,怎麼處理?
      

  3.   

    连个php程序谁也不会等谁,只是因为时间没有改变都没有返回的条件而已
      

  4.   

    剛才我已經解決了chrome的等待問題了,在ajax請求url的時候,加一個隨機數就可以了
    我有一個疑問,如果,有人惡意刷新頁面,會不會建立N個push.php在後臺默默運行?還有一個疑問,如果用iframe不斷的接受數據,怎麼處理?
    set_time_limit(0);
    echo str_repeat(' ',4096);
    while(1){
    sleep(1);
    echo '1<br>';
    ob_flush();   
    flush(); 
    if(connection_aborted()){
    break;
    }
    }
      

  5.   

    connection_aborted()會否檢查到,我只關了這個iframe推送頁面,我沒有關閉瀏覽器或沒有退出程序,就會停止推送?
      

  6.   

    你这个是 server push 吗?
    服务器推送是要浏览器支持的,因为已越出 http 协议的范围了。
    过去只有已倒闭的网景浏览器支持这种方式,现在还没听说那个浏览器支持这个东西#3 的代码只是将一次 http 请求延长至 30 秒(time()-$time>=30)
      

  7.   

    web qq 是否模擬 server push 吗?
    web office 是用socket還是模擬 server push 長連接?IE6-IE8都不支持socket,但是可以用microsoft的web office,他們是否用了iframe不斷接收服務器輸出的數據??
      

  8.   

    唠叨大哥,通過服務器不斷發送數據到客戶端,建立長連接模擬socket是否可行,服務器資源方面?
      

  9.   


    ff支持websocket,猜想chrome应该也支持
      

  10.   


    /*
    server.php
    */
    if(isset($_POST['text'])){
    file_put_contents('txt.txt', $_POST['text']."\r\n");
    echo '1';
    exit;
    }$filemtime = isset($_POST['filemtime']) && $_POST['filemtime']? $_POST['filemtime']: filemtime('txt.txt');while(1){
    if($filemtime == filemtime('txt.txt')){
    sleep(1);
    clearstatcache();
    }else{
    echo json_encode(array('filemtime' => filemtime('txt.txt'), 'text' => file_get_contents('txt.txt')));
    exit;
    }
    }/*
    a.html
    */
    <input type="text" id="text" value="text">
    <input type="button" value="发送" onclick="send()"><script src="../jquery.js"></script>
    <script>
    function send(){
    var text = document.getElementById("text").value; $.post("server.php", {"text": text, "rand": Math.random()}, function(data){
    if(data == "1"){
    alert("发送成功!");
    }
    });
    }
    </script>
    /*
    b.html
    */
    <div id="div"></div><script src="../jquery.js"></script>
    <script>
    var filemtime = 0;
    function test(){
    $.post("server.php", {"filemtime": filemtime, "rand": Math.random()}, function(data){
    if(data){
    data = eval("(" + data + ")");
    filemtime = data["filemtime"];
    document.getElementById("div").innerHTML = data["text"];
    setTimeout("test()", 1000);
    }else{
    alert("error");
    }
    });
    }test();
    </script>
    /* 说明:测试中你要先开启b.html然后再开启a.html发送消息,至于server.php,你只要将内容放进去就不用管了 */
      

  11.   

    既然 #11 说 ff支持websocket 。那就请他给个例子就是了socket 通讯的基础是在两点间已建立了持续的连接,一方始终在监听与对方约定的端口,并根据得到的数据作出相应的动作所以 服务器推,不但要浏览器听,还要求服务器端的程序常驻,并具有听功能
      

  12.   

    kyzy_yy_pm的ajax的例子很好,還有沒有其他列子呢?例如:socket或iframe
      

  13.   


    这个很简单了,php 或者 node.js 都能实现
    google 一下即可