Socket Heartbeat vs keepalive

Quels sont les avantages et les inconvénients de la mise en œuvre de propres battements de cœur et de leur propre configuration pour un socket?

Je lis quelque part, que keepalive peut parfois échouer et la connexion sera fermée de toute façon (dépend de la structure du réseau). Une autre chose est que propre battement de cœur peut détecter si l’application est réactive (pas seulement le socket).

Mon objective principal est de veiller à ce que toutes les fonctionnalités restnt les mêmes, même si aucune donnée n’est envoyée (à côté des pulsations), détection rapide des pertes de connexion des deux côtés, détection de la réactivité des applications.

J’ai déjà implémenté un simple battement de coeur à deux bouts et cela fonctionne très bien, mais je me demande si je pourrais peut-être le remplacer par une fonctionnalité Keepalive prête à l’emploi.

L’un des problèmes rencontrés avec la fonctionnalité de maintien de la connexion TCP est qu’il n’est pas toujours facile à configurer. Par exemple, sous Linux, il existe différentes options pour setsockopt (par exemple TCP_KEEPIDLE, TCP_KEEPCNT et TCP_KEEPINTVL) que vous pouvez utiliser pour définir le comportement du keepalive par rapport à ce que vous voulez, mais dans d’autres par programmation . Donc, si vous voulez que le comportement keepalive de votre programme soit portable à divers systèmes d’exploitation et qu’il se comporte de manière cohérente sur chacun d’eux, il est généralement préférable de lancer votre propre rythme cardiaque.

D’un autre côté, il peut y avoir des programmes ou des protocoles réseau qui ne prennent pas facilement en charge le concept de message de pulsation / no-op (ou vous voudrez peut-être que votre programme puisse utiliser plusieurs protocoles, sans avoir à venir avec la logique de keepalive séparée pour chaque protocole pris en charge), et dans ce cas, vous pouvez utiliser le keepalive intégré car il a la capacité d’envoyer et de recevoir des paquets keepalive “transparents” qui n’affectent pas le contenu du stream de données TCP . Dans ce cas, le keepalive intégré peut être utile (surtout si vous avez uniquement besoin du code keepalive pour fonctionner sous Linux).