J'utilise Web socket en utilisant PHP5 et le navigateur Chrome en tant que client. J'ai pris le code du site http://code.google.com/p/phpwebsocket/ .
Je lance le serveur et le client est également connecté. Je peux aussi discuter. Maintenant, lorsque je redémarre le serveur (en le tuant et en le redémarrant), le client obtient les informations déconnectées, mais ne se reconnecte pas automatiquement au serveur lorsque j'envoie le message.
Comment y parvenir? Comme lorsque j'obtiens les informations déconnectées, dois-je les vérifier et les envoyer à JavaScript pour actualiser la page ou me reconnecter?
la source
start
récursivement, sans jamais revenir.La solution proposée par Andrew ne fonctionne pas parfaitement car, en cas de perte de connexion, le serveur peut envoyer plusieurs événements de fermeture.
Dans ce cas, vous définirez plusieurs setTimout. La solution donnée par Andrew ne peut fonctionner que si le serveur est prêt avant cinq secondes.
Ensuite, sur la base de la solution Andrew, retravaillée, j'ai utilisé setInterval en attachant l'ID à l'objet window (de cette façon, il est disponible "partout"):
la source
setTimeout
si vous leur appliquez l'idée "global timer id";)onclose
événement sera déclenché à nouveau.Reconnexion de WebSocket
GitHub héberge une petite bibliothèque JavaScript qui décore l'API WebSocket pour fournir une connexion WebSocket qui se reconnectera automatiquement si la connexion est interrompue.
La bibliothèque réduite avec compression gzip est inférieure à 600 octets.
Le référentiel officiel est disponible ici:
https://github.com/joewalnes/reconnecting-websocket
Inondation de serveurs
Si un nombre élevé de clients sont connectés au serveur lors du redémarrage. Il peut être intéressant de gérer les délais de reconnexion des clients en utilisant un algorithme de réduction exponentielle.
L'algorithme fonctionne comme ceci:
Référence:
http://blog.johnryding.com/post/78544969349/how-to-reconnect-web-sockets-in-a-realtime-web-app
la source
J'utilise ce modèle depuis un certain temps pour du JavaScript purement vanille, et il prend en charge quelques cas de plus que les autres réponses.
Cela réessaiera dès que le serveur fermera la connexion, et il vérifiera la connexion pour s'assurer qu'elle est également active toutes les 5 secondes.
Donc, si le serveur n'est pas opérationnel lorsque cela s'exécute ou au moment de l'événement onclose, la connexion sera toujours rétablie une fois qu'elle sera de nouveau en ligne.
REMARQUE: l'utilisation de ce script ne vous permettra pas d'arrêter d'essayer d'ouvrir une connexion ... mais je pense que c'est ce que vous voulez?
la source
Voici les codes que j'ai utilisés dans mon projet qui fonctionnent à 100%.
var name = sessionStorage.getItem ('nom');
la source
Je ne peux pas commenter, mais ce qui suit:
De plus, https://www.npmjs.com/package/back est déjà assez bon :)
la source
la source
Enfin, je fais une reconnexion automatique ws dans vue + ts, similaire à ce qui suit:
la source
L'événement de fermeture côté client pour WebSocket a une propriété wasClean , ce qui m'a été utile. On dirait qu'il est défini sur true dans les cas où l'ordinateur client passe en mode veille, etc. ou lorsque le serveur est arrêté de manière inattendue, etc. Il est défini sur false si vous fermez manuellement le socket, auquel cas vous ne voulez pas ouvrir la prise à nouveau automatiquement. Ci-dessous le code d'un projet Angular 7. J'ai ce code dans un service, il est donc utilisable à partir de n'importe quel composant.
la source