2016-07-13 35 views
2

Ich würde eine einfache Uhr mit sent-Ereignis meinen Code ist: Der Client und Server ist im LAN, und der Browser ist Iceweasel v.38.7.1.einfacher Server send-event: Uhr nach 30 Minuten stoppen

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); 
})(); 

um die Uhr für 30 bis 45 Minuten, nachdem sie stoppen,
Wo habe ich falsch gemacht?
danke.

+0

Server-Timeout? – mplungjan

+0

Sie können die Entwicklerkonsole verwenden, um mit ihr zu debuggen, es ist schwierig, das Problem zu finden, indem Sie Code betrachten – siddhesh

Antwort

1

Ihr PHP-Skript sollte folgendermaßen aussehen:

<?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); 
    } 

Andernfalls wird Ihr PHP-Skript ständig endet (was völlig entfällt die Stelle von SSE mit), die SSE-Buchse wird geschlossen, und der Browser dann auto-Reconnects . Theoretisch ad infinitum, aber möglicherweise hat es nach 30 Minuten etwas satt :-)

Was ich dachte, das Problem würde sein, war Skript-Timeout. Also am Anfang Ihrer PHP-Skript sollten Sie hinzufügen:

set_time_limit(0); 

Auch dies sagt, Sie das PHP-Skript für immer ausgeführt werden soll, dass die unendliche Schleife, die durch Design, und kein Fehler.