PHP Event Source wird weiterhin ausgeführt
Ich habe begonnen, Push in HTML5 mit dem JavaScript EventSource-Objekt zu verwenden. Ich war total zufrieden mit einer funktionierenden Lösung in PHP:
$time = 0;
while(true) {
if(connection_status() != CONNECTION_NORMAL) {
mysql_close()
break;
}
$result = mysql_query("SELECT `id` FROM `table` WHERE UNIX_TIMESTAMP(`lastUpdate`) > '".$time."'");
while($row = mysql_fetch_array($result)) {
echo "data:".$row["id"].PHP_EOL;
echo PHP_EOL;
ob_flush();
flush();
}
$time = time();
sleep(1);
}
Aber plötzlich war meine WebApp mit einem MySQL-Fehler "zu viele Verbindungen" nicht mehr erreichbar.
Es stellte sich heraus, dass die MySQL-Verbindung nach dem Schließen der Ereignisquelle in JavaScript nicht geschlossen wird:
window.onload = function() {
sse = new EventSource("push.php");
sse.onmessage = function(event) {
console.log(event.data.split(":")[1]);
}
}
window.onbeforeunload = function() {
sse.close();
}
Ich vermute also, dass das PHP-Skript nicht aufhört, auszuführen. Gibt es eine Möglichkeit, eine Funktion aufzurufen (wie zdie();
) bevor die Clientverbindung getrennt wird? Warum wird mein Skript nach dem Aufruf nicht beendet?.close();
auf der EventSource ?!
Danke für die Hilfe! -