J'ai une application client/serveur écrite en Delphi. Essentiellement, tout ce que l'application fait est de transférer des flux de données xml entre une application serveur et des clients connectés. J'utilise actuellement le composant Indy TIdTCPServer. Mais l'application côté serveur continue de planter sur certaines de mes installations. Et il a été extrêmement difficile à déboguer. Je me demande donc s'il n'existe pas une "architecture" que je devrais utiliser pour gérer toutes les connexions tcp/ip et la mise en commun des connexions à la base de données, ce qui me permettrait de me concentrer sur la logique commerciale.
Voici plus de détails :
- les clients doivent maintenir une connexion "persistante". Il y a des moments où le serveur doit notifier et envoyer des données à tous les clients connectés.
- Les clients se connectent à partir d'ordinateurs portables utilisant des cartes aériennes sans fil. Les "coupures" de réseau sont donc assez courantes.
- La base de données dorsale est SqlServer.
- Il peut y avoir jusqu'à 100 ordinateurs connectés simultanément. Lorsque le serveur reçoit une nouvelle connexion (TCPServer.OnConnect), j'instancie mon propre objet contenant sa propre connexion à la base de données SqlServer. Lorsque les connexions tcp sont abandonnées, je libère à mon tour ces objets (et la connexion à la base de données associée).
- Les applications clientes intègrent un TTimer. Elles envoient régulièrement des battements de cœur au serveur. Et s'ils "lâchent"/"perdent" leur connexion, ils établissent automatiquement une nouvelle connexion dès que le réseau est rétabli.
Quelqu'un a-t-il des suggestions sur la meilleure approche/architecture à adopter ?
Je suppose que le composant Indy fonctionnerait, mais j'ai en même temps l'impression de "réinventer la roue" en ce qui concerne la gestion des connexions.