Je dois écrire un TCP Client
qui aura la capacité de se reconnecter au serveur. Le serveur peut être indisponible en raison d'une mauvaise qualité de la connexion réseau ou de problèmes de maintenance. Je suis à la recherche de solutions de qualité dans ce domaine.Implémentation correcte du client de reconnexion TCP C#
Mes solutions actuelles est le suivant:
- garder l'état de connexion dans ConnectionState ENUM {Hors ligne, en ligne, Connexion}
- créer client
TcpClient
classe. - créer deux minuteries appelés
ConnectionCheckTimer
etReconnectTimer
- connecter au serveur thread lecteur démarrage
- et vérifier la lecture minuterie
- de connexion est réalisée avec tcpClient.GetStream(), puis la lecture de ce flux
- quand Exception est intercepté dans l'état du lecteur readerLoop l'état du client est déconnecté et ReconnectTimer est lancé
ConnectionCheckTimer
vérifie périodiquement lastMessageTimestamp et le compare à l'heure actuelle si l'intervalle est supérieur à maxValue il lau NchesReconnectTimer
Actuellement, je ne suis pas satisfait de cette solution car elle génère encore des exceptions, par exemple ObjectDisposedException sur TcpClient.NetworkStream. Je suis à la recherche d'une implémentation de client de reconnexion Tcp propre et réutilisable capable de gérer tous les problèmes de socket qui peuvent se produire lors de la connexion, la déconnexion, la lecture de données.