Socket.io-client: v3-Trennung des Sockets scheint die zugrunde liegende Verbindung zu schließen.

Erstellt am 16. Nov. 2020  ·  4Kommentare  ·  Quelle: socketio/socket.io-client

Du möchtest:

  • [x] einen Fehler melden
  • [ ] Feature anfordern

Aktuelles Verhalten

Nachdem ich auf v3 aktualisiert habe, wenn ich socket.disconnect() auf der Client- oder Serverseite aufrufe, scheint es, dass die zugrunde liegende Verbindung des Managers ebenfalls geschlossen wird - alle anderen Sockets, die denselben Manager / dieselbe zugrunde liegende Verbindung verwenden, werden ebenfalls getrennt.

Ich weiß nicht, wo ich dieses Problem einreichen soll. Vielleicht hat es root in engine.io v4?

Hier ist ein Diff meines Projekts während des Upgrades . Ich entschuldige mich, dass es auch einige nicht damit verbundene Änderungen enthält. Die Hauptsache, die ich hervorheben möchte, ist, dass ich keine Änderungen an der Einrichtung und Verwaltung von Verbindungen vorgenommen habe (Sie können cmd + F für "disconnect", "close", "io.socket" verwenden).

Schritte zum Reproduzieren (wenn das aktuelle Verhalten ein Fehler ist)

Bitte sehen Sie sich diese jsfiddle an .

Erwartetes Verhalten

Das Verhalten von v2 ist, dass das Aufrufen von socket.close() auf der Client- und auf der Serverseite diesen Socket nur schließen sollte, wenn ein Manager mehrere Namespaces hat – es sollte nicht jeden gemultiplexten Socket unter dem Manager dieses Sockets schließen.

Aufstellen

  • Betriebssystem: Windows 10
  • Browser: Chrome 86.0
  • socket.io-Version: 3.0.0

Beobachten Sie den Verhaltensunterschied, wenn Sie stattdessen socket.io v2 verwenden.

Sonstige Informationen (z. B. Stacktraces, verwandte Probleme, Vorschläge zur Behebung)

Alle 4 Kommentare

Ich habe eine Menge Zeit damit verbracht, meinen eigenen Code zu debuggen, weil ich dachte, ich hätte etwas kaputt gemacht :')

Freue mich auf die Korrektur! Und nochmals vielen Dank für Ihre harte Arbeit beim Starten von v3.

Das Ereignis "connecting" wird bei einer Socket-Verbindung nie ausgelöst und füllt nicht das Array connecting im Manager:
https://github.com/socketio/socket.io-client/blame/master/lib/manager.ts#L599

Wenn _destroy aufgerufen wird, wird if (this.connecting.length) return; this._close(); immer die Verbindung schließen.

Ich sehe kein Problem im Clientcode. Im Servercode konnte ich kein Ereignis namens "connecting" finden.

Hier ist der Commit, der die Ausgabe von "Connecting" entfernt.

https://github.com/socketio/socket.io-client/commit/b60e909039d4bbb979d32ec86ac16c5398526b44#diff -f0e64910289a49966c99ceadaa5637404e3439ec0812a4bdb7003fe1e5a33d1c

@darrachequesne Könnten Sie bitte dieses Problem überprüfen.

@david-fong Ich konnte das Problem tatsächlich reproduzieren, vielen Dank für die detaillierten Schritte :+1:

Dies sollte durch https://github.com/socketio/socket.io-client/commit/f8f60fc860f51aa6465fc32dd9275a8e1d22f05d behoben werden (enthalten in [email protected] ).

Nochmals vielen Dank für den ausführlichen Bericht, das hilft wirklich!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen