2017-06-30 1 views
1

Je page html envoyé par le serveur Node.js et socket.io composant qui se connecte à ce serveur comme ceci:détecter et détruire socket.io déconnecter des événements côté client

var socket = io(); 

également plusieurs événements de socket:

socket.on('server-message', function(type, content) { 
    ... 
}); 

socket.on('server-update', function(type, content) { 
    ... 
}); 

le problème est que dans le serveur moment est arrêté, je reçois des erreurs côté client:

https://example.com/socket.io/?EIO=3&transport=polling&t=LptmQyC net::ERR_CONNECTION_REFUSED 

Une fois le serveur redémarré, il se bloque 30 secondes plus tard.

On dirait que je pourrais utiliser une détection si le serveur n'est plus disponible et que tous les détruirai socket événements liés, puis reconnectez-vous rafraîchir la page ou d'un bouton.

Peut-être que quelqu'un pourrait me aider.

Répondre

0

Je ne crois pas que beaucoup peut être fait l'erreur, l'erreur socket.io interne qui est le résultat du scrutin du serveur échoue. Pour une meilleure compréhension, une fois la connexion coupée, socket.io passe en relève ajax et tente de se reconnecter dès que possible (c'est-à-dire dès que le serveur est de nouveau en service).

plantage du serveur Reconnexion d'autre part peut être traitée très facile. Le code que vous avez présenté est seulement fonctionnel en termes de connexion, il vous manque des gestionnaires pour vous déconnecter et éventuellement - reconnecter.

Je vais vous montrer comment vous pouvez ajouter à ce code pour gérer débranchements (et éviter les pannes de serveur après avoir mis le sauvegarder).

d'abord se connecter au serveur:

var socket = io(); 

Créer un événement de déconnexion juste après (BTW son aussi un code pour l'événement de déconnexion côté serveur):

socket.on('disconnect', function() { 
    destroy_socket_events(); 
}); 

Créer fonction qui détruira tous vos auditeurs:

var destroy_socket_events = function() { 
    socket.off('disconnect'); 
    socket.off('server-message'); 
    socket.off('server-update'); 
    // add all other socket events that you have in here ... 
}; 

maintenant ce qui va se passer est le suivant:

  • connexion est établie
  • serveur
  • est arrêté
  • client déclenche l'événement de déconnexion
  • fonction
  • détruit tous vos auditeurs socket
  • serveur
  • est de retour
  • reconnexions client (socket.io fera à cause de scrutin)
  • aucun écouteur est jamais déclenché à ce moment

Ainsi, vous pouvez réinitialiser en toute sécurité tout votre code et attacher les auditeurs correctement.