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.

Franzlorenzon
quelle
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.

Robertklep
quelle
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.

Ansari Abdullah
quelle
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
});
Na Nonthasen
quelle
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.

Ilan
quelle
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.

Qiulang
quelle