【问题标题】:simple server sent-event: clock stop after 30 minutes简单的服务器发送事件:时钟在 30 分钟后停止
【发布时间】:2016-07-13 08:47:15
【问题描述】:

我会用已发送事件制作一个简单的时钟,我的代码是: 客户端和服务器在局域网,浏览器是iceweasel v.38.7.1。

php:

<?php
header("Content-Type: text/event-stream");
header("Cache-Control: no-cache");
header("Connection: keep-alive");
function sendMsg($msg) {
  echo "retry: 1000\n";
  echo "data: $msg" .PHP_EOL;
  echo PHP_EOL;
  ob_flush();
  flush();
}
sendMsg(date("H:i", time()));

js

(function get_time()
{var source = new EventSource('/config/rtc/get_time.php');

source.addEventListener('message',function (event)
  {document.getElementById("orologio").innerHTML=event.data;},false);

source.addEventListener('error', function(event) { 
if (event.readyState === EventSource.CLOSED)
{get_time();}},false);
})();

时钟工作 30-45 分钟,停止后,
我哪里做错了?
谢谢。

【问题讨论】:

  • 可以使用开发者控制台调试,看代码很难发现问题

标签: javascript php polling server-sent-events


【解决方案1】:

您的 PHP 脚本应如下所示:

<?php
header("Content-Type: text/event-stream");
header("Cache-Control: no-cache");
header("Connection: keep-alive");
function sendMsg($msg) {
  echo "retry: 1000\n";
  echo "data: $msg" .PHP_EOL;
  echo PHP_EOL;
  ob_flush();
  flush();
}
while(true){
   sendMsg(date("H:i", time()));
   sleep(1);
   }

否则,您的 PHP 脚本会不断关闭(这完全取消了使用 SSE 的意义),SSE 套接字关闭,然后浏览器自动重新连接。理论上无限循环,但可能会在 30 分钟后厌倦 :-)

我认为问题是脚本超时。因此,您应该在 PHP 脚本的顶部添加:

set_time_limit(0);

再一次,这是说您希望 PHP 脚本永远运行,无限循环是设计使然,而不是错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 2018-04-15
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多