Źródło zdarzeń PHP nadal działa

Zacząłem używać push5 w HTML5 przy użyciu obiektu JavaScript EventSource. Byłem całkowicie zadowolony z działającego rozwiązania w 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);
}

Ale nagle mój WebApp nie był już dostępny z błędem MySQL „zbyt wiele połączeń”.

Okazało się, że połączenie MySQL nie zamyka się po zamknięciu źródła zdarzenia w JavaScript:

window.onload = function() {
    sse = new EventSource("push.php");
    sse.onmessage = function(event) {
        console.log(event.data.split(":")[1]);
    }
}
window.onbeforeunload = function() {
    sse.close();
}

Domyślam się, że skrypt PHP nie przestaje działać. Czy jest jakiś sposób na wywołanie funkcji (jakdie();) przed rozłączeniem połączenia klientów? Dlaczego mój skrypt nie kończy się po wywołaniu.close(); na EventSource ?!

Dzięki za pomoc! -

questionAnswers(6)

yourAnswerToTheQuestion