7
votes

Comment reconnecter Socket.IO Client sur l'activité après la reconnexion automatique de temps?

Il est courant que les ordinateurs portables se rendent endormis. Cela provoque la déconnexion du client Socket.IO. Lorsque l'utilisateur retourne à l'application Web, le client Socket.io n'essaie pas de renouer (probablement la limite de reconnexion atteinte?). Comment puis-je dire à la prise de reconnecter si l'utilisateur fait une action?

Par exemple, j'aimerais que la fonction EMIT Pour vérifier si la connexion est active, et sinon, essayez de vous reconnecter.

Remarque: j'ai seulement besoin du code JS côté client et je n'utilise pas de nœud.js.


0 commentaires

4 Réponses :


2
votes

Vous pouvez essayer d'utiliser l'événement Connect.FAILED. / CODE> Evénement:

socket.on('connect_failed', function () {
   /* Insert code to reestablish connection. */
});


2 commentaires

J'ai déjà essayé ça. Le problème est que le Connect_Failed n'est pas tiré après que l'ordinateur portable se réveille ou une fois qu'un sans fil perdu est reconnecté. C'est pourquoi je pense à attacher la reconnexion à l'activité de l'utilisateur, mais je ne sais pas comment le faire.


+1 Parce que cette méthode est appelée lorsque l'ordinateur portable se réveille. Mais j'ai toujours besoin d'un moyen d'essayer reconnecté après la sortie de la reconnexion automatique et la socket.io abandonne, comme lorsqu'il n'y a pas de connectivité réseau.



4
votes

Les instances de socket ont une propriété "socket" intérieure, qui est à son tour de la méthode de connexion () que vous pouvez appeler. Il est normalement appelé automatiquement lorsque vous instaniez l'objet (contrôlé par l'option 'Auto Connect'). La prise interne a également une propriété booléenne "connectée" que vous pouvez vérifier si vous n'êtes pas sûr de l'état de l'état. Comme: xxx

la méthode Connect () vérifie pour vous assurer que la prise n'est pas au milieu d'essayer de se connecter, mais pour une raison quelconque, elle ne vérifie pas si c'est Déjà connecté. Je ne sais pas ce qui se passe si vous connectez () une prise déjà connectée ...

Le code source de la bibliothèque client est assez clair et bien commenté, ce qui est bon depuis Le readme sur GitHub ne fournit pas beaucoup d'aide. Il est pratique d'utiliser une version non minifiée de la bibliothèque pendant votre développement afin que vous puissiez creuser dans la source.


2 commentaires

Merci Dirk. Où pourrais-je dire cela pour dire à Socket.io de reconnecter s'il n'est pas connecté chaque fois que le client tente d'envoyer quelque chose au serveur?


Dépend beaucoup de la manière dont votre code est structuré. Vous pouvez mettre un wrapper autour d'EMIT () qui vérifie l'état de la connexion. Vous pouvez avoir une fonction sur ("déconnecter") qui apparaît une boîte de dialogue demandant si l'utilisateur souhaite reconnecter. Vous devrez également expérimenter de voir ce qui se passe réellement lorsque vous fermez le couvercle sur un ordinateur portable. Je ne sais pas comment le code Socket.io perçoit que ...



7
votes

dans la version 0.9 Vous pouvez essayer de définir l'objet Options de connexion à certains paramètres agressifs:

  var main = io.connect('/', {
    'reconnection delay': 100, // defaults to 500
    'reconnection limit': 100, // defaults to Infinity
    'max reconnection attempts': Infinity // defaults to 10
  });


0 commentaires

-2
votes

Vous pouvez avoir une exécution seinterval qui vérifie le statut connecté comme xxx


0 commentaires