2015-08-25 8 views
7

Ich bin neu auf SSE und ich folge dem w3schools tutorial. Ich habe ihrem Beispiel Code hinzugefügt, damit ich sehen kann, wann die Verbindung geöffnet wird und wann ein Fehler auftritt. Hier ist mein Code:HTML5 Server-Gesendete Ereignisse Ein Fehler wird alle 3 Sekunden angezeigt

<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> 

Und mein serverseitigen Code:

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

Die Dokumentation sagt, dass

Ein Server gesendet Ereignis ist, wenn eine Web-Seite automatisch erhält Updates von ein Server. Dies war auch vorher möglich, , aber die Webseite müsste fragen, ob irgendwelche Updates verfügbar waren. Bei serverseitigen Ereignissen werden die Aktualisierungen automatisch ausgeführt.

Aber die Konsole zeigt uns das Gegenteil:

enter image description here

Die clientseitige wird eine neue Verbindung anfordert, wird die Meldung bekommen, ein Fehler auftritt und die Verbindung geschlossen wird. Dies wird alle 3 Sekunden wiederholt. Warum passiert dies?

Antwort

1

Ich vermute, dass Ihre serverseitige Implementierung die HTTP-Verbindung nicht offen hält. Es verbindet sich also immer wieder neu.

Ich schreibe nicht PHP aber every example Ich habe verwendet ob_flush() zusätzlich zu flush().

ob_flush(); 
flush(); 

Haben Sie das versucht?

Verwandte Themen