简单服务器发送事件:时钟在 30 分钟后停止
simple server sent-event: clock stop after 30 minutes
我会用发送事件制作一个简单的时钟,我的代码是:
客户端和服务器在局域网内,浏览器是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分钟,停止后,
我哪里做错了?
谢谢。
您的 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 脚本永远 运行,无限循环是设计使然,不是错误。
我会用发送事件制作一个简单的时钟,我的代码是: 客户端和服务器在局域网内,浏览器是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分钟,停止后,
我哪里做错了?
谢谢。
您的 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 脚本永远 运行,无限循环是设计使然,不是错误。