SSE不会记录断开连接



我当前有一个简单的SSE页面用于测试。当前,我可以在用户连接时并连接时将页面登录;但是,当页面关闭时(例如用户断开连接)时,它不会记录任何内容。我正在使用函数error_log进行记录。另外,使用NGINX和PHP 7.2。这是我的代码:

header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
header('X-Accel-Buffering: no');
ignore_user_abort(true);
$aid = 1;
function sendMsg($id , $msg) {
    echo "id: $id" . PHP_EOL;
    echo "data: " . json_encode(array('x'=> $msg)) . PHP_EOL;
    echo "retry: 0" . PHP_EOL;
    echo PHP_EOL;
    @ob_end_flush();
    flush();
}//END FUNCTION sendMsg
function endPacket() {
    echo "0rnrn";
    @ob_end_flush();
    flush();
}//END FUNCTION endPacket
$startedAt = time();
error_log("Starting SSE to User: " . $aid);
while (true) {
    set_time_limit(15);
    if ( connection_status() != 0 ) {
        error_log("Ending SSE to User: " . $aid);
        endPacket();
        die();
    }//END IF
    error_log("Connected SSE as User: " . $aid);
    sendMsg( $startedAt, $aid . ' | ' . connection_status() );
    sleep(10);
}//END WHILE

您的代码无法检测到断开连接,因为您需要向用户写入脱节之前,才能检测到脱节

虽然您的演示代码可以做到这一点,但实际上却没有。这就是您的代码现在所做的:

detect_connection();
sendMsg();
sleep();
detect_connection();
sendMsg();
<timeout>

您示例中触发连接断开消息的唯一方法是,如果您第一次致电" sendmsg()",如果连接已关闭,则可能不会发生什么,因为您不是很快

<</p>

最新更新