J'ai écrit un serveur exécutant des opérations d'E/S non bloquantes à l'aide de l'API Java NIO. Je vois une situation dans laquelle une application cliente s'arrête soudainement (par exemple en raison d'une perte de puissance) et la connexion est laissée ouverte du côté serveur. Un collègue a rencontré le même problème et a dit qu'il utilise les battements de coeur sur la ligne pour détecter ce genre de chose, mais j'espère qu'il y a un moyen plus facile. Quelqu'un d'autre a-t-il rencontré ce problème? Quelques informations supplémentaires: Ma conception de serveur actuelle annulera une clé et fermera la voie correspondante si elle saisit IOException
lors d'une tentative de lecture/écriture. Cette approche semble fonctionner 99% du temps; J'ai seulement vu une poignée de situations où la connexion semble être laissée ouverte.NIO - Détection d'une connexion fermée
7
A
Répondre
6
Sans les battements cardiaques au niveau de l'application, votre seule option est de compter sur TCP keepalive. Mais l'intervalle par défaut est très long (comme 2 heures). Le RFC ne recommande pas un intervalle inférieur à 2 heures.
Vous pouvez le raccourcir mais il s'agit de paramètres à l'échelle du système. Sur certains OS, il faut même reconstruire le noyau pour changer cela. Par conséquent, un battement de cœur est fortement recommandé pour tout protocole basé sur TCP.
Questions connexes
- 1. La connexion sous-jacente a été fermée: La connexion a été fermée de manière inattendue.
- 2. Détecter une connexion prématurément fermée dans web.py
- 3. Détection d'une connexion d'alimentation CA dans WinPE?
- 4. Détection de la connexion Bureau à distance
- 5. Comment résoudre l'erreur: "La connexion sous-jacente était fermée"?
- 6. Détecter la connexion du navigateur fermée en PHP
- 7. Problème de thread Java NIO avec SocketChannel.write()
- 8. Comment puis-je créer différents sélecteurs pour accepter une nouvelle connexion dans Java NIO
- 9. C# & Win32 notifier quand une fenêtre séparée est fermée/fermée
- 10. .Équivalent du sélecteur NIO de Java
- 11. aide nécessaire dans l'implémentation de threads dans NIO
- 12. Pourquoi l'erreur "La connexion sous-jacente était-elle fermée" lors de l'obtention d'une image?
- 13. Impossible de passer des emails via l'échange: Une connexion existante a été fermée par l'hôte distant
- 14. System.Net.WebException: La connexion sous-jacente a été fermée: Une erreur inattendue s'est produite sur une réception
- 15. La connexion sous-jacente a été fermée: Une erreur inattendue est survenue sur une réception
- 16. Connexion non fermée - Mise au point du pool de connexions SQL Server
- 17. Qu'arrive-t-il à une transaction non validée lorsque la connexion est fermée?
- 18. WCF - Connexion socket non fermée à l'aide de WS-Compression avec la liaison net.tcp
- 19. Problème avec dbUnit: java.sql.SQLException: instruction fermée
- 20. DWR + printemps + JPA Session fermée
- 21. "La session est fermée!" - NHibernate
- 22. Détection multitouch
- 23. Java NIO: lecture de blocs de taille variable
- 24. Java NIO FileChannel par rapport à FileOutputstream performance/utilité
- 25. Java NIO UDP - Sélecteur se bloque en essayant d'enregistrer
- 26. Le serveur NIO ne peut pas écouter le client
- 27. eof détection pour DirectShow
- 28. Impossible de rouvrir l'application fermée sur l'émulateur
- 29. Détection du port utilisé par Webbrowser
- 30. Détection d'une erreur de connexion de base de données à l'aide de Linq?
Merci Codeur ZZ - C'est ce que je pensais (craint). Je suis assez étonné que ce ne soit pas une caractéristique de TCP. – Adamski
Un "ping" plutôt, ces applications ne sont pas humaines - vous savez. –