Обнаружение отмены пользователя / навигационных веб-сокетов

Я экспериментирую с веб-сокетами и хотел бы определить, не перешел ли пользователь со страницы на запуск сценария 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();
    }
}

1 ответ

Я, кажется, решил это, но повторяет и сбрасывает состояние отсутствия обновлений при каждом запросе перед тестом для живого соединения

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();
}
Другие вопросы по тегам