/ / Détecter la connexion WebSocket fermée - android, node.js, websocket

Détecter la connexion WebSocket fermée - Android, node.js, websocket

Je suis en utilisant node.js et WebSocket-Node construire un simple serveur de discussion en ligne.

Le client est une application Android.

Le serveur doit communiquer avec les clients de deux manières:

  • Message websocket lorsque le client est connecté (application ouverte au premier plan)
  • Notification Push à l'aide de Google GCM sinon

Mais il y a un petit problème que je dois comprendre ..

Lorsque le client est connecté au serveur etla connexion Internet est interrompue, le serveur n'est pas averti à ce sujet car le client n'a pas envoyé le frame de fermeture. Le serveur pense donc que la connexion est encore active pendant 10 secondes.

Si, au cours de ces 10 secondes, le serveur envoie le message via le socket, le message ne peut jamais atteindre le client.

Je dois détecter le moment où la connexion est fermée ou un autre moyen d’envoyer le message via GCM lorsque la connexion est fermée.

Y a-t-il un moyen?

Réponses:

1 pour la réponse № 1

Une déconnexion non propre (aucun message de déconnexion envoyé) est impossible à distinguer d’une connexion très lente du côté du serveur.

Ce que vous devez faire est d'avoir une sorte debattement de coeur. WebSockets a des pings au niveau du protocole pour cela. Si votre bibliothèque expose cela, définissez le ping sur un délai que vous êtes prêt à accepter et ajoutez un gestionnaire pour le cas où cela échouerait / ne serait pas terminé après un délai.


1 pour la réponse № 2

Répondre à ma propre question, parce que: ce n’est pas possible, et j’ai trouvé un autre meilleur moyen de gérer mon cas particulier.

  • Lorsque le serveur envoie un message au client, le client répond au serveur pour l'informer que le message a été remis au client.
  • Si le serveur ne reçoit pas la réponse du client après un délai d'attente, la connexion est considérée comme fermée.
  • Continuez à envoyer le message via GCM (ou stockez-le pour le renvoyer lorsque le client se reconnectera).