Ruft den Verbindungsstatus auf dem Socket.io-Client ab


71

Ich verwende Socket.io und möchte den Status der Verbindung zum Server von der Clientseite aus erfahren.

Etwas wie das:

socket.status // return true if connected, false otherwise

Ich benötige diese Informationen, um dem Benutzer ein visuelles Feedback zu geben, wenn die Verbindung unterbrochen oder aus irgendeinem Grund getrennt wurde.


1
Verwenden Sie den aufgelisteten socket.io-Client: github.com/LearnBoost/socket.io-client oder eine einfache socket.io-Bibliothek?
jsist

Ich verwende die von Node.js bereitgestellte Javascript-Datei, daher denke ich, dass es die erste ist.
Franzlorenzon

Antworten:


123

Sie können die socket.connectedEigenschaft überprüfen :

var socket = io.connect();
console.log('check 1', socket.connected);
socket.on('connect', function() {
  console.log('check 2', socket.connected);
});

Es wird dynamisch aktualisiert. Wenn die Verbindung unterbrochen wird, wird es so lange eingestellt, falsebis der Client die Verbindung wieder aufnimmt. So einfach zu überprüfen setIntervaloder so ähnlich.

Eine andere Lösung wäre, disconnectEreignisse zu erfassen und den Status selbst zu verfolgen.


3
Es funktioniert perfekt. Ich habe diese Eigenschaft nicht in den Dokumenten gefunden, also danke für die wertvollen Informationen;)
Franzlorenzon

7
Ich fand es durch console.log'ing the socketvariable;)
robertklep

22
In v1.0 ist es jetzt socket.connectednicht socket.socket.connected.
Simeon Cheeseman

2
In socket.io 2.0.2 verwende ich socket.connectedund es verhält sich wie erwartet (Rückgabe entweder wahr oder falsch). Beachten Sie, dass es falseunmittelbar nach dem Anruf ist, io(server)aber truefast unmittelbar danach. Ich bin mir nicht sicher, ob dies eine Rennbedingung ist, obwohl ich feststelle, dass es keine Rückrufoption gibt, io()also denke ich, dass es einfach so funktioniert.
Iain Collins

2
@IainCollins verwendet anstelle von Rückrufen Ereignisse. io(...)sagt nur, dass socket.ioeine Verbindung hergestellt werden soll, aber erst wenn das connectEreignis gesendet wurde, hat es tatsächlich eine Verbindung hergestellt.
Robertklep

8

Mit dieser Funktion können Sie überprüfen, ob die Verbindung unterbrochen wurde oder nicht: -

var socket = io( /**connection**/ );
socket.on('disconnect', function(){
//Your Code Here
});

Hoffe es wird dir helfen.


7

Heutzutage funktioniert socket.on ('connect', ...) bei mir nicht. Ich benutze den folgenden Code, um bei der ersten Verbindung zu überprüfen.

if (socket.connected)
  console.log('socket.io is connected.')

und verwenden Sie diesen Code, wenn die Verbindung wiederhergestellt wird.

socket.on('reconnect', ()=>{
  //Your Code Here
});

3

Verfolgen Sie den Status der Verbindung selbst. Mit einem Booleschen Wert. Stellen Sie es falsebei der Deklaration ein. Verwenden Sie die verschiedenen Ereignisse (Verbinden, Trennen, Wiederverbinden usw.), um den aktuellen Booleschen Wert neu zuzuweisen. Hinweis: Die Verwendung von undokumentierten API-Funktionen (z. B. socket.connected) ist keine gute Idee. Die Funktion könnte in einer nachfolgenden Version entfernt werden, ohne dass die Entfernung erwähnt wird.


socket.connected ist Teil der Dokumentation und kann hier referenziert werden: socket.io/docs/client-api/#socket-connected
Ryan Rentfro

2

Die Antwort von @ robertklep auf die Überprüfung von socket.connected ist korrekt, mit Ausnahme des Ereignisses zum erneuten Verbinden ( https://socket.io/docs/client-api/#event-reconnect) . aber wenn Sie überprüfen, socket.connecteddann ist es falsch.

Ich bin mir nicht sicher, ob es ein Fehler oder eine Absicht ist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.