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

问题描述 投票:1回答:1

我目前正在将服务器发送的事件实现到我的服务器/网页上。我已经实现了一个简单的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。为什么是这样?

javascript php server-sent-events
1个回答
1
投票

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

BTW。 Microsoft浏览器不支持服务器发送的事件(Edge 18到目前为止) - CanIUse EventSource

© www.soinside.com 2019 - 2024. All rights reserved.