Как правильно настроить Server-Sent Events в PHP?

PHP предоставляет встроенную поддержку для Server-Sent Events (SSE), которая позволяет создавать веб-страницы, которые могут получать обновления от сервера в режиме реального времени. Для настройки SSE в PHP вам понадобится следовать нескольким шагам.

Шаг 1: Создайте скрипт PHP, который будет генерировать события SSE. Начните скрипт, отправив соответствующие заголовки, чтобы сообщить браузеру, что это поток SSE. Затем установите тайм-аут соединения на неограниченное время, чтобы поддерживать длительное соединение с браузером. Далее, используйте функцию echo для вывода данных события в формате SSE. Не забудьте вызвать функцию flush(), чтобы убедиться, что данные отправляются немедленно, а не кэшируются на сервере.

<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
header('Connection: keep-alive');
header('X-Accel-Buffering: no');
ini_set('max_execution_time', 0);

$counter = 0;

while (true) {
    $counter++;
    
    echo "event: myEventn";
    echo "data: This is event number " . $counter . "nn";
    
    if (connection_aborted()) {
        break;
    }
    
    flush();
    sleep(1);
}
?>

Шаг 2: Создайте HTML-страницу, которая будет прослушивать события SSE и отображать их на странице. Для этого вам нужно создать объект EventSource, указав URL-адрес вашего скрипта PHP, который генерирует события SSE. Затем вам нужно добавить слушатель событий, который будет реагировать на получение нового события и обновлять содержимое HTML-элемента на странице.

<!DOCTYPE html>
<html>
<head>
    <script>
        var events = new EventSource("your_script.php");
        
        events.addEventListener("myEvent", function(event) {
            var data = event.data;
            // Обновить содержимое HTML-элемента на странице
        });
    </script>
</head>
<body>
    <!-- HTML-элемент для отображения данных события -->
</body>
</html>

Когда вы запускаете вашу HTML-страницу в браузере, она будет подключаться к вашему скрипту PHP, который будет генерировать события SSE. При получении нового события на странице будет вызываться слушатель событий, который обновит содержимое HTML-элемента на странице.

Основываясь на этих шагах, вы можете настроить Server-Sent Events (SSE) в PHP для веб-страниц, которые получают обновления от сервера в режиме реального времени.