• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> 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