2015-08-25 15 views
7

Sono nuovo su SSE e sto seguendo lo w3schools tutorial. Ho aggiunto del codice al loro esempio in modo da poter vedere quando viene aperta la connessione e quando si verifica un errore. Qui è il mio codice:HTML5 Server-Eventi inviati onerror visualizzati ogni 3 secondi

<script> 
var source = new EventSource("sse.php");       
source.addEventListener('message', function(e) { 
    console.log("onmessage");   
    document.getElementById("result").innerHTML += event.data + "<br>";  
}, false); 

source.addEventListener('open', function(e) { 
    console.log("onopen"); 
}, false); 

source.addEventListener('error', function(e) { 
    console.log('error '+e.readyState); 
}, false); 

</script> 

E il mio codice lato server:

<?php 
header('Content-Type: text/event-stream'); 
header('Cache-Control: no-cache'); 

$time = date('r'); 
echo "data: The server time is: {$time}\n\n"; 
flush(); 
?> 

La documentazione dice che

Un evento server inviato è quando una pagina web riceve automaticamente aggiornamenti da un server. Anche questo era possibile prima, ma la pagina web avrebbe dovuto chiedere se erano disponibili aggiornamenti. Con gli eventi inviati dal server, gli aggiornamenti vengono automaticamente.

ma la console ci mostra il contrario:

enter image description here

Il lato client richiede una nuova connessione, ottenere il messaggio, un errore si verifica e la connessione viene chiusa. Questo viene ripetuto ogni 3 secondi. Perché sta succedendo?

risposta

1

Sospetto che l'implementazione lato server non registri la connessione HTTP aperta. Quindi si ricollegherà all'infinito.

Non scrivo PHP ma every example ho trovato utilizza ob_flush() oltre a flush().

ob_flush(); 
flush(); 

Hai provato?