2014-09-25 55 views
0

我正在試驗websockets,並希望檢測用戶是否已從頁面導航到PHP流腳本從運行。其他一切工作正常。檢測用戶中止/導航websocket

我試圖做的所有事情都不會停止運行PHP腳本(在本地使用Xampp)。

我目前使用JavaScript的beforeunload工作,和PHP的connection_aborted()connection_status()甚至file_exists()(這是目前的工作只有一個!)。 直到腳本存在或我重新啓動Apache我不能重新加載頁面,但它是中止檢測,我必須工作。 Firebug報告套接字腳本已中止,但PHP只是保持離子運行。任何幫助讚賞。

我的JavaScript看起來像這樣

function socket_open(){ 
    if(!!window.EventSource){ 
     var websocket = new EventSource('./ajax/progress.php'); 
     websocket.addEventListener('message', function(e){ 
      var data = JSON.parse(e.data); 
      console.log(data); 
     },false); 
     $(window).bind('beforeunload', function(){ 
      websocket.onclose = function(){}; 
      websocket.close(); 
     }); 
    } 
} 

我的PHP是這樣的。 ./ajax/progress.php

function get_task_progress(){ 
    $output = array(); 

    //conditionally create some output 

    if(!empty($output)){ 
     echo 'data: '.json_encode($output)."\n\n"; 
     ob_flush(); 
     flush(); 
    } 
    sleep(1); 
    if(!connection_aborted() && connection_status()==0 && file_exists('1.txt')){ 
     get_task_progress(); 
    } 
} 

回答

0

我似乎已經解決了,但呼應和測試之前每個請求沖洗不更新狀態的實時連接

if(!empty($output)){ 
    $tasks_state = $tasks_new; 
    echo 'data: '.json_encode($output)."\n\n"; 
}else{ 
    echo 'data: '.json_encode(array('e'=>0))."\n\n"; 
} 

ob_flush(); 
flush(); 
sleep(1); 
if(!connection_aborted() && connection_status()==0){ 
    get_task_progress(); 
}