如何仅触发一次服务器发送的事件?

时间:2019-04-12 08:44:57

标签: javascript php server-sent-events

我当前正在将服务器发送的事件实施到我的服务器/网页上。我已经实现了一个简单的PHP脚本,该脚本仅回显“ 1”,而一个简单的JavaScript则获取消息并将其显示在屏幕上。我无法理解的是为什么它在一段时间内不在php脚本中时反复在网页上重复打印“ 1”?

我已经阅读了多个论坛和文章,但似乎无法理解为什么这样做。

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 个答案:

答案 0 :(得分:1)

浏览器在连接关闭一段时间后尝试重新连接。您可以在服务器响应中使用retry: X来设置延迟(以毫秒为单位)

顺便说一句。 Microsoft浏览器(到目前为止,Edge 18)不支持服务器发送的事件-CanIUse EventSource