HTML 5 服务器发送事件EventSource如何让其每秒执行一次?

发布于 2022-09-01 15:33:43 字数 871 浏览 16 评论 0

W3C的例子:http://www.w3school.com.cn/tiy/t.asp?f=html5_sse

例子是每三秒执行一次,能否每秒执行一次?

图片描述

<!DOCTYPE html>
<html>
<body>


<h1>获得服务器更新</h1>




<div id="result"></div>




<script>
if(typeof(EventSource)!=="undefined")
  {
  var source=new EventSource("http://www.w3school.com.cn/example/html5/demo_sse.php");
  source.onmessage=function(event)
    {
    document.getElementById("result").innerHTML+=event.data + "<br />";
    };
  }
else
  {
  document.getElementById("result").innerHTML="Sorry, your browser does not support server-sent events...";
  }
</script>



</body>
</html>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

怪我入戏太深 2022-09-08 15:33:43

EventSource对象并不能够自行设定刷新时间,这依赖于浏览器的具体实现,比如在Chrome中的刷新时间是3秒,但是在Firefox中刷新时间为5秒。

事实上,如果你可以控制服务器的话,可以在服务器端使用retry头信息,指定通信的最大间隔时间。

服务器收到请求时,并不会立即回复这个请求,只有当服务器需要推送数据的时候,才会以data:'message'这样的格式返回信息,但是此时利用的是分块传输机制刷新缓存,并不释放连接,以便下一次继续推送。

所以这里有一个坑需要注意,如果你的服务器使用的是Nginx而不是Apache,那么需要关闭相应请求的buffer才能达到预期效果。

梦幻的心爱 2022-09-08 15:33:43

虽然这个问题已经很久了,但还是回答一下造福后人吧。

php端输出的时候这么输出就可以了

echo "retry:1000\ndata: Hello World.\n\n";

债姬 2022-09-08 15:33:43

EventSource是html5监听后端更新的api 也就是说 ,触发的频率是由后端决定的
所以你可以设置后端更新为一秒一次就好了

轮廓§ 2022-09-08 15:33:43

浏览器对EventSource有最小时间的阀值,即使后端设为1秒也没有用。

眉黛浅 2022-09-08 15:33:43

只能说简单的例子害了善良的楼主,那个不是3s执行一次,是3s重连一次,因为后端没实现长连接,那么后端如何实现长连接呢,对于php来说很简单,设置完页面超时时间后执行while或者for循环就可以了。

clipboard.png

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文