Как запустить отправленное сервером событие только один раз? - PullRequest
1 голос
/ 12 апреля 2019

В настоящее время я внедряю события, отправленные сервером, на мой сервер / веб-страницу.Я реализовал простой скрипт php, который просто отображает «1», и простой JavaScript, который получает сообщение и отображает его на экране.Что я не могу понять, так это то, почему он постоянно печатает «1» на веб-странице, если он не просматривается в php-скрипте?

Я прочитал несколько форумов и статей и не могу понять, почемуделает это.

Код php:

<?php
    header('Content-Type: text/event-stream');
    header('Cache-Control: no-cache');

    $num = 1;

    echo "data: {$num} \r\n";
    @ob_flush();
    flush();
    usleep(500000);

?>

И Javascript:

var source = new EventSource("sse.php");
source.onmessage = function(event) {
    document.getElementById("result").innerHTML += event.data + "<br>";
};

Я ожидаю, что файл php будет запущен один раз ичисло «1», которое будет отображаться на экране, однако, кажется, каждые несколько секунд выполняется печать 1 на экране.Почему это?

1 Ответ

1 голос
/ 12 апреля 2019

Браузер пытается восстановить соединение через некоторое время после закрытия соединения. Вы можете использовать retry: X в ответе сервера для установки задержки (в мс)

КСТАТИ. Отправленные сервером события не поддерживаются в браузерах Microsoft (пока Edge 18) - CanIUse EventSource

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...