• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

[Javascript] JavaScript EventSource wird nicht geschlossen

Mini-Leopard

Rhode Island Greening
Registriert
20.03.08
Beiträge
476
Liebe Leute!

Ich hab grad ein Problem mit einer WebApp.
Bisher war ich mit meiner HTTP-Push Implementierung ganz zufrieden. Sehr schnell, sehr stabil.

Nur plötzlich kam mein MySQL Server mit einem "too many connections" Fehler.
Dann hab ich mich mal ran gemacht und das ganze untersucht.

Ich erzeuge beim Laden der Seite einen Server Stream (EventSource) zu einer push.php.
In dieser PHP läuft eine Schleife, die einen MySQL Server auf updates überprüft und diese ggf. an den client pusht.

Bevor die Seite entladen wird (onbeforeunload) schließe ich den Server Stream:
Code:
ServerStream.close();
Das scheint jedoch nicht zu passieren.
Testweise tab ich einfach mal folgendes kleines Snippet in in die while(true){sleep(1);} Schleife in meiner push.php gepackt:
Code:
$handle = fopen("connection.log", "a+");
fwrite($handle, connection_status()."\t\t".date("H:i:s").PHP_EOL);
$close($handle);

Und siehe da:
Wenn ich im per Web Konsole die serverStream.close(); aufrufe, wird zwar kein weiteres event mehr empfangen, allerdings scheinbar die Verbindung nicht getrennt.
Jede Sekunde (auch lange nach dem schließen von sowohl serverStream, als auch der ganzen Seite), wird ein CONNECTION_NORMAL geschrieben.
Also wird das PHP Script scheinbar nicht beendet…

Hier mein mainscript:
Code:
1    window.onload = function() {
[SIZE=1]2[/SIZE]    serverStream = new EventSource("push.php");
[SIZE=1]3[/SIZE]        serverStream.onmessage = function(evt) {
[SIZE=1]4[/SIZE]            console.log(evt.data);
[SIZE=1]5[/SIZE]        }
[SIZE=1]6[/SIZE]    }
[SIZE=1]7[/SIZE]    window.onbeforeunload = function() {
[SIZE=1]8[/SIZE]        serverStream.close();
[SIZE=1]9[/SIZE]    }


Kann mir jemand was dazu sagen?
Sehr sehr komisch, oder?!

Danke schon mal, liebe Grüße