• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Wir haben den Frühjahrsputz beendet, Ihr auch? Welches Foto zu dem Thema hat Euch dann am Besten gefallen? Hier geht es lang zur Abstimmung --> 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