我正在尝试使用websockets,并希望检测用户是否已从页面导航到运行的PHP流脚本。其他一切都很好。
我尝试做的每件事都不会阻止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 :(得分: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();
}