2013-08-15 5 views
8

Comment puis-je détecter si le serveur est hors ligne ou si, pour une raison quelconque, il ne peut pas se connecter? Mon code ressemble à ceci. Il ne lance aucune erreur, donc une clause try/catch ne fonctionne pas.Socket.io se connecte au serveur hors ligne

Répondre

12

utilisation

  • this.socket.on("connect") pour attraper les événements de connexion
  • this.socket.on("disconnect") pour attraper les événements de déconnexion
  • this.socket.on("connect_failed") pour attraper connexion tentatives infructueuses

utilisation this.socket.io.on ("connect_error ", callback) pour attraper si le serveur est hors ligne.

Vous pouvez trouver tous les événements, à https://github.com/LearnBoost/socket.io/wiki/Exposed-events

+0

Dans le cas où cela aide d'autres personnes à trouver this-- le « connect_failed » et « reconnect_failed » Les événements ne sont pas déclenchés correctement dans les versions 0.9.x de Socket.io (y compris 0.9.16). Plus de détails ici: https://github.com/LearnBoost/socket.io/issues/652 et une solution de contournement ici: https://groups.google.com/forum/#!topic/socket_io/7BynuejEmts – mikermcneil

2

Si votre serveur est hors-ligne et le client tente de se connecter utilisation:

socket.on('error', function (err) { 
    console.log(err); 
}); 

Ainsi le client sait qu'il ne peut pas atteindre le serveur.

+1

Après quelques tests, il ne semble pas fonctionner de cette façon dans le dernier client stable Socket.io (v0.9.16) – mikermcneil

4

Depuis la mise à jour 1.0, les événements de connexion sont différents. lire cette page pour plus d'informations: http://socket.io/docs/migrating-from-0-9/

Dans mon cas, je ne pouvais détecter une erreur de connexion comme ceci:

var manager = io.Manager('http://'+window.location.hostname+':3000', { /* options */ }); 
manager.socket('/namespace'); 
manager.on('connect_error', function() { 
    console.log("Connection error!"); 
}); 

this.socket = io.connect('http://'+window.location.hostname+':3000'); 
Questions connexes