【问题标题】:Detecting user abort/navigation websockets检测用户中止/导航 websocket
【发布时间】:2023-04-02 20:11:01
【问题描述】:

我正在尝试使用 websockets,并想检测用户是否已从页面导航到运行 PHP 流脚本。其他一切正常。

我所做的一切都不会阻止 PHP 脚本运行(在本地使用 Xampp)。

我目前正在使用 javascript 的 beforeunload、PHP 的 connection_aborted()connection_status() 甚至 file_exists()(这是目前唯一可以使用的!!!)。 在脚本存在或我重新启动 apache 之前,我无法重新加载页面,但这是我必须开始工作的中止检测。 Firebug 报告套接字脚本已中止,但 PHP 只是保持 ion 运行。任何帮助表示赞赏。

我的 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();
    }
}

【问题讨论】:

    标签: javascript php websocket phpwebsocket


    【解决方案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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多