Node.js Socket.io Aktualisierung der Seite mehrere verbindungen
habe ich diese einfach node.js Servercode mit Buchse.io (1.5):
var io = require('socket.io').listen(8080);
io.on('connection', function(socket) {
console.log(' %s sockets connected', io.engine.clientsCount);
socket.on('disconnect', function() {
console.log("disconnect: ", socket.id);
});
});
Wenn ich diesen code ausführen und drücken Sie die F5-Taste mehrmals, in einigen Fällen neue Verbindung erstellt wird, bevor der alte nicht angeschlossen ist. Nach einiger Zeit, ich denke, die die Heartbeat-Timeout, werden alle verbindungen geschlossen werden. Das Ergebnis sehen:
2 sockets connected
3 sockets connected
4 sockets connected
5 sockets connected
6 sockets connected
7 sockets connected
8 sockets connected
9 sockets connected
10 sockets connected
11 sockets connected
disconnect: 0h_9pkbAaE3ftKT9AAAL
11 sockets connected
12 sockets connected
13 sockets connected
14 sockets connected
disconnect: oB4HQRCOY1UIvvZkAAAP
14 sockets connected
15 sockets connected
disconnect: LiIN0oDVoqbePgxFAAAR
15 sockets connected
16 sockets connected
17 sockets connected
18 sockets connected
disconnect: zxvk-uhWABHzmu1uAAAV
18 sockets connected
19 sockets connected
20 sockets connected
disconnect: FlboxgTzcjf6ScffAAAY
20 sockets connected
21 sockets connected
disconnect: 9UGXbnzukfGX_UtWAAAa
21 sockets connected
disconnect: pAfXOEz6RocKZdoZAAAb
21 sockets connected
disconnect: DIhTyVgG2LYBawaiAAAc
21 sockets connected
disconnect: W4XOc1iRymfTE2U0AAAd
21 sockets connected
disconnect: WZzegGPcoGDNLRTGAAAe
21 sockets connected
22 sockets connected
disconnect: KVR3-fYH0cz77BmgAAAC
disconnect: ANQknhnxr4l-OAuIAAAD
disconnect: KZE5orNx6u9MbOArAAAE
disconnect: TS6LL3asXrcznfcPAAAF
disconnect: SVNxS3I7KqecdqKhAAAG
disconnect: IE2WE5Y0PJzvxgBfAAAH
disconnect: v69bdJav9PjpThBGAAAI
disconnect: mJKT1ggfOOTshZKgAAAJ
disconnect: YlycVjdcWe0emCAcAAAK
disconnect: MoIDJSzP_L-1RUwuAAAM
disconnect: wAl0x5qwCkrnDDYQAAAN
disconnect: eiTlPEk2Hx_X-L-fAAAO
disconnect: KgkrXxzG_EpXOsPTAAAQ
disconnect: Lvf3kK-6XXEbu3NWAAAS
disconnect: -hOoGdYOIvVK04K_AAAT
disconnect: 3EUmaAYpK-U3Ss9tAAAU
disconnect: HQ6M98FebtKlU3OfAAAW
disconnect: OwgrbRBYbS4j84nmAAAX
disconnect: yN8FZAP4RjUNl2MeAAAZ
disconnect: K9IFTjlgAWzdNfpUAAAf
Meine Frage ist:
Ist das ein Bug oder ist das das normale Verhalten des Sockels.io? Wie kann ich verhindern, dass die Verbindung überschwemmungen, einfach F5 drücken?
Beste Grüße
Marc
- Der browser sollte in der Nähe öffnen webSockets, wenn Sie den browser aktualisieren und dann sollten Sie sich trennen. Wenn nicht, dann wäre das ein browser-bug. Im Fall, dass der browser nicht sofort schließen der webSocket-Buchse.io wird sehen, dass der socket nicht mehr aktiv ist (weil der Herzschlag) und der Steckdose wird irgendwann bereinigt.
- Dies geschieht mit allen aktuellen Browsern.
- Was ist die Zeit zwischen, wenn Sie drücken Sie die F5-Taste und wenn die server endlich mal das zu trennen? Es sieht auch wie etwas falsch sein kann, in Ihr zählen, weil Sie nicht zeigen, die Zählung geht nach unten, wenn Sie eine Verbindung trennen.
- Wenn Sie F5 drücken, nur einmal das ist, trennen Sie kommt sofort. Aber wenn Sie drücken Sie die F5-Taste schnell genug, einige discennects "verloren". Ich dont denke, der counter ist falsch, denn die Beispiel-server nur zählt, wenn eine neue Verbindung geöffnet wird
- Mein Kommentar über die Theke ist, dass Sie eine disconnect-Nachricht, aber die zählen nicht nach unten gehen. Das scheint ziemlich sichtbar im log. Wenn es nur rapid fire aktualisiert, die das problem verursachen, ich weiß nicht, warum Sie besorgt sind über die Frage überhaupt. Tun Sie bereinigen nach sich selbst, nach einiger kurzer Zeit, so gibt es kein versehentliches langfristige Akkumulation von nichts. Bedeutet das jede wirkliche Problem? Kürzen kann man die Buchse.io-inactivity-timeout, so dass Sie sich selbst reinigen früher, aber das schaffen könnte, andere Kompromisse also, wenn es nicht tatsächlich verursacht das ein echtes problem, würde ich Sie nicht ändern.
- Sorry ich war nicht klar genug...Zum Beispiel bei 1: 14 Steckdosen angeschlossen 2: trennen: oB4HQRCOY1UIvvZkAAAP 3: 14 Steckschlüsseleinsätze mit Ersten Zeile: Es gibt eine neue Verbindung => Count = 14, Zweite Zeile: Dort war eine Unterbrechung => Count = 13 (Sie können nicht sehen, die 13, die in den log, weil seine nur das schreiben ins log-für eine neue Verbindung die) Dritte Reihe: Es gibt eine neue Verbindung => 13 + 1 = 14, Wenn dies ein echtes Problem? Ich weiß es nicht...aber wenn Sie das aussenden von Nachrichten an andere Buchsen auf ein disconnect-Ereignis es kann ein Problem sein.
- haben Sie einen Blick auf meine Antwort auf meine eigene Frage hier - es fixiert es für mich. stackoverflow.com/questions/48137228/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Machte ich meine eigenen test-app und war in der Lage, herauszufinden, was Los ist.
Wenn Sie drücken Sie die F5-Taste ganz schnell mehrere Male, tut Es vorübergehend akkumulieren einige extra Steckdose.io-verbindungen in Chrom, aber innerhalb relativ kurzer Zeit (vielleicht ein paar Minuten), es gewinnt und die Gesamtzahl der verbundenen sockets zurück zu 1.
Nach weiteren Tests habe ich herausgefunden, dass dies nicht ein browser-Problem. Dies ist ein Problem mit wie-Buchse.io beginnt eine Steckdose.io-Verbindung. Wenn du diese ersetzen im client:
mit dabei:
welche Kräfte Buchse.io verwenden Sie NUR eine webSocket und nie verwenden HTTP-polling, dann verschwindet das problem.
So, das Problem ist, da das Standardverhalten für die Steckdose.io ist zu beginnen mit einem http-polling-version von a-Buchse.io-Verbindung. Nach ein wenig Daten ausgetauscht, Steckdose.io wird dann versuchen, wechseln Sie zu einem echten webSocket. Wenn das real webSocket funktioniert, dann wird es stoppen Sie die Verwendung des http-polling-Verbindung.
Aber, wenn du eine F5-Taste in der Mitte des übergangs zwischen polling und ein echter webSocket, es wird keine persistente Verbindung noch für den sockel.io zu wissen, dass die web-Seite war es nur für die Kommunikation mit ist jetzt Weg. Also, alles, was Sie tun können, ist, um herauszufinden, einige Zeit später, dass es nicht mehr jede eingehende Mitteilung, die web-Seite und sollte somit klar, bis es die Buchse.io-Verbindung (es war im polling-Modus, wenn Sie drücken Sie die F5-Taste).
Aber, wenn Sie das Gerät ausschalten, die ursprüngliche polling-Modus mit den oben genannten client-code, dann ist es immer nur wird mit einem echten webSocket (nie verwendet, das simulierte polling-Modus) und die Browser sind sehr gut bei der Reinigung des webSocket, wenn Sie drücken Sie die F5-Taste, damit der server entweder noch nicht fertig, über das die Buchse.io-Verbindung (in dem Fall gibt es keine Verbindung und doch war vorübergehend verwaist), oder es ist schon Umgerechnet über eine webSocket (und der browser wird sauber beendet, die auf die F5-Taste).
So, in diesem ist eine design-Einschränkung der http-polling-Modus, Steckdose.io beginnt. Da es keine durchgehende Verbindung, wenn in diesem Modus, gibt es keine sofort-Benachrichtigung, die durch den browser, wenn Sie diese Seite ersetzt mit F5 und so der server hat keine Möglichkeit zu wissen, dass der client einfach verschwunden. Aber, wenn Sie überspringen Sie die http-polling-Modus, und starten Sie mit einem echten webSocket, dann gibt es keine solche Zeitfenster, wo es eine Steckdose.io-Verbindung, aber keine wirkliche webSocket und somit ist der server immer gesagt, sofort durch den browser schließen der webSocket-Verbindung, wenn die Seite verschwindet.