Ai-je besoin de battement de coeur de garder une connexion TCP ouverte?
J'ai deux composants qui communiquent via le protocole TCP/IP. La composante A agit en tant que serveur/auditeur et le Composant B est le client. Les deux doivent communiquer le plus rapidement possible. Il ne peut jamais être une connexion à tout moment (bien que ce soit réservée à cette question). Un développeur senior en ma compagnie a dit j'ai besoin d'utiliser le niveau d'application des battements de cœur entre les deux composants pour s'assurer que la connexion reste ouverte.
Je pensais que la connexion reste ouverte avec le protocole TCP/IP mais j'ai lu un certain nombre de blogs/sites en disant: c'est assez pratique standard de pulsation entre ces applications.
Je connais une partie de la raison de la composante A des battements de cœur composant B est de sorte qu'il peut informer la prise en charge si il y a des problèmes de communication avec le composant B (le lien est en bas ou de composant B n'est pas en cours d'exécution). Sont les battements de cœur nécessaire pour toute autre raison? Comme pour s'assurer qu'il est souvent quelque chose "dans le tuyau" pour le garder ouvert?
Composant actuellement les pulsations de la composante B toutes les 20 secondes et ferme la connexion si rien n'a été reçu de composant B dans les 120 secondes. Il reprend ensuite à l'écoute pour les connexions sous l'hypothèse que la composante B périodiquement tenter une reconnexion si le lien est rompu. Cela fonctionne avec succès.
Réitérer ma question: est-ce les battements de cœur nécessaire pour garder une connexion TCP/IP à la vie?
- Ce comportement pourrait-il également être mise en œuvre à charge? Est-ce quelque chose que spécifié dans le protocole TCP standard, ou est-ce qu'un détail d'implémentation? J'espère que quelqu'un d'autre peut répondre à cela.
- C'est un détail d'implémentation, je dirais que pas tous les protocoles TCP/IP de mettre en œuvre tel qu'il est laissé entièrement à vous.
- Oui - non pas parce que de TCP/IP - mais parce que, d'un autre matériel ou logiciel de connexion vous pouvez aller à travers comme les pare-feu et de la maison "routeurs", qui ont tendance à baisser inactif connexions TCP, connexes: stackoverflow.com/questions/3907537/...
Vous devez vous connecter pour publier un commentaire.
La connexion devrait restent ouverts, peu importe, mais oui, il est souvent fréquent de voir des protocoles de mettre en œuvre un battement de cœur afin de les aider à détecter les connexions mortes, IRC avec la PING de commande par exemple.
Comme beaucoup d'autres l'ont noté, la connexion TCP va rester en place si laissé à ses propres dispositifs. Toutefois, si vous avez un appareil au moyen de la connexion qui assure le suivi de son état (comme un pare-feu), vous devrez les connexions actives afin de conserver l'état d'entrée de la table d'expirer.
Si vos composants:
alors vous n'avez pas besoin d'avoir un battement de coeur.
Si l'une de ces hypothèses sont fausses (je suis à la recherche à vous, GPRS!), un battement de cœur devient nécessaire assez rapidement.
Vous n'avez pas besoin d'envoyer les battements de cœur de vous-même. La connexion TCP restera ouvert indépendamment de l'utilisation.
Note que le protocole TCP met en œuvre une option de keepalive mécanisme, qui peut être utilisé pour identifier une connexion fermée en temps opportun, plutôt que de vous obliger à envoyer des données à une date ultérieure et découvrir la connexion est fermée.
Si votre utilisation de windows, soyez prudent sur la TCP Keep-alive. Par défaut, le son désactivé, sauf si vous l'allumer à l'échelle mondiale avec le registre de windows ou via setsockopt.
Le défaut persistant de l'intervalle est de 2 heures.
http://msdn.microsoft.com/en-us/library/ms819735.aspx
Vous pourriez avoir besoin pour mettre en œuvre votre propre battement de coeur et de désactiver TCP keep-alive sur windows si les 2 heures keep-alive alive n'est pas souhaitable.
Ils sont utiles pour détecter lorsqu'une connexion est mort.
Battre le cœur est un bon moyen de dire au serveur que vous êtes en vie, de laquelle je veux dire que, si le serveur est à l'aide d'attaque par déni de service des systèmes de prévention, il (le serveur) peut supprimer toutes les ressources allouées pour cette connexion particulière, après la il a détecté en activité pour une période déterminée.
Leur pas de mandat pour mettre en œuvre tout battement de coeur mécanismes.
Mais le son est bon si vous êtes à la conception d'une application, où le critère principal, c'est la réactivité. Vous aimez pas perdre de temps lors de la connexion des installations, des recherches DNS, et un chemin de découvertes. Il y a tout juste garder une connexion tout le temps, continuer à envoyer des battements de coeur, et l'application est capable de connexion est vivant, et la connexion de l'installation n'est pas nécessaire. Juste simple d'envoyer et de recevoir.
TCP va garder la connexion. L'application battements de coeur sont pour le niveau d'application des considérations de ce type de basculement, l'équilibrage de la charge, ou d'avertir les administrateurs de problèmes potentiels.
Fondamentalement une connexion TCP crée des états de lien stockées dans des commutateurs, ainsi que pour la route. Afin de détecter les connexions rompues (comme quand un homologue des accidents (sans l'envoi d'un bon de déconnecter)), ces états doivent être expulsés après une période d'inactivité. Et quand cela arrive, votre connexion TCP a été fermée.
Bien que je ne peux pas dire exactement combien de temps ces délais d'attente sont, ils semblent dépendre de l'appareil-les producteurs et/ou fournisseurs d'accès à internet. Je me souviens de mon inactivité terminal SSH sessions ont été rapidement (moins de 15 minutes d'inactivité) fermé par mon ancien 1&1 fournisseur d'accès internet alors qu'ils sont restés ouverts pendant plusieurs heures lors de l'utilisation d'un Kabel-BW fourni de connexion...
Enfin, je termine avec mes précédents orateurs: un les battements de coeur est une bonne façon de savoir si une connexion est toujours bien vivante...
Ce que vous appelez un battement de coeur est utile lorsque vous essayez de définir les délais. Votre prise peut sembler ouverte, mais la personne qui souffre peut-être d'un BSOD. L'une des façons les plus faciles de détecter les défunte clients/serveurs est de définir un délai d'attente et assurez-vous qu'un message est reçu chaque tellement souvent.
Certains les appellent NOOPs(Pas d'Ops).
Mais non, ils ne sont pas nécessaires pour garder la connexion active, uniquement utile de savoir quel est le statut est.
Je dirais que si vous n'avez pas un battement de cœur, il n'a pas d'importance si votre connexion TCP/IP est ouvert ou pas.
Rythme cardiaque n'est pas une nécessité pour les protocoles TCP. C'est la mise en œuvre est là pour détecter si le otherside a mis fin à la connexion non standard (j'.e ne sont pas passés par la déchirure le processus).
TCP/IP comme protocole est spécifié comme n'étant pas fermée jusqu'à ce que vous envoyez un proche de paquets. J'ai eu des sockets restent ouverts même après avoir boutonneux sans fil ou d'une connexion internet.
Cependant, tout cela est très dépendant de l'implémentation. Le plus probable, il y aura un "délai d'attente", ce qui signifie que le montant maximum de temps à attendre une réponse avant d'envisager la connexion est "mort". Parfois, cela est basé sur l'application elle-même, parfois, sur des routeurs NAT.
Par conséquent, je vous recommande fortement de vous garder un "battement de cœur" afin de détecter les mauvaises connexions et de les garder ouverts.
La connexion reste ouverte - il n'est pas nécessaire de mettre en œuvre un battement de cœur, et la plupart des applications qui utilisent des sockets ne pas le faire.
Beaucoup de protocoles de mettre en œuvre un battement de coeur ou un état de santé type de chose comme Lloyd a dit. Juste pour vous informer que la connexion est toujours ouvert et, si vous avez manqué quelque chose