Gibt es eine Möglichkeit, einen Client mit SocketIO zu trennen und die Verbindung buchstäblich zu schließen? Wenn also jemand mit meinem Server verbunden ist und ich die Verbindung zwischen ihm und meinem Server schließen möchte, wie würde ich das tun?
116
iptables
Je niedriger diese implementiert sind (z. B. ), desto mehr Ressourcen sparen Sie. In den meisten Fällen sollte es jedoch ausreichen, nur den Client zu treten, da Socketio keine so schnelle Verbindung herstellt und wenn jemand Sie wirklich tun möchte, hat er sowieso andere Möglichkeiten (z. B. das Herunterladen von Seiten von Ihnen).socket.disconnect()
kann nur auf der Clientseite verwendet werden, nicht auf der Serverseite.Client.emit('disconnect')
Löst das Trennungsereignis auf dem Server aus, trennt den Client jedoch nicht effektiv. Dem Client ist die Trennung nicht bekannt.Es bleibt also die Frage: Wie kann ein Client gezwungen werden, die Verbindung zur Serverseite zu trennen?
quelle
Client.emit('disconnect')
Mit den neuesten Versionen von socket.io müssen Sie nicht mehr manuell anrufen, es gibt jetzt eine serverseitige Versionsocket.disconnect()
(siehe meine Antwort).socket.disconnect()
auch auf der Serverseite verwendet werden kann.disconnect()
Beendigung der Funktion einige Parameter an den Rückruf übergebe ?Gibt es einen Grund, warum der Server keine Nachricht an den Client senden kann, die ihn dazu bringt, die Trennungsfunktion aufzurufen?
Auf Client:
Auf dem Server:
quelle
Angenommen, der Socket Ihres Sockets heißt:
quelle
Für diejenigen, die dies bei Google gefunden haben - es gibt momentan eine Lösung dafür:
Socket.disconnect()
tritt den Client (serverseitig). Keine Chance für den Kunden, in Verbindung zu bleiben :)quelle
disconnect
Ereignis des Sockets, um herauszufinden, ob die Verbindung getrennt wurde. Kann auch dieclose
Veranstaltung sein, da bin ich mir nicht ganz sicher. Weitere Informationen hierzu finden Sie in der Dokumentation zu socket.io.Wenn ich heute Morgen nachschaue, scheint es, dass es jetzt ist:
https://socket.io/docs/client-api/#socket-close
quelle
In meinem Fall wollte ich die zugrunde liegende Verbindung abbrechen. In diesem Fall musste ich anrufen,
socket.disconnect(true)
wie Sie sehen können, wird von der Quelle hier benötigtquelle
client._onDisconnect()
sollte arbeitenquelle
Socket.io verwendet das EventEmitter-Muster, um Herzschläge zu trennen / zu verbinden / zu überprüfen, damit Sie dies tun können.
Client.emit('disconnect');
quelle
Das hat bei mir nicht funktioniert :
Das hat bei mir funktioniert :
Durch die Übergabe
true
wird die zugrunde liegende Verbindung zum Client geschlossen und nicht nur der Namespace, mit dem der Client mit der Socket IO-Dokumentation verbunden ist .Ein Anwendungsbeispiel: Der Client hat eine Verbindung zum Web-Socket-Server mit ungültigem Zugriffstoken hergestellt (Zugriffstoken, das mit Verbindungsparametern an den Web-Socket-Server übergeben wurde). Der Web-Socket-Server benachrichtigt den Client, dass die Verbindung aufgrund seines ungültigen Zugriffstokens geschlossen wird:
quelle
Ich verwende
client.emit('disconnect')
+client.removeAllListeners()
für einen verbundenen Client, um alle Ereignisse nach dem Trennen der Verbindung zu ignorierenquelle
Ich benutze auf der Client-Seite
socket.disconnect();
quelle
verwenden :
verwende nicht :
quelle
Sie können
socket = undefined
löschen, welche Buchse Sie angeschlossen haben. Wenn Sie also eine Verbindung herstellen möchten, tun Sie Socket (URL)So wird es also aussehen
quelle
Fügen Sie einem Array neue Socket-Verbindungen hinzu, und wenn Sie alle schließen möchten, durchlaufen Sie sie und trennen Sie die Verbindung. (Serverseite)
quelle