Devo eseguire un heartbeat per mantenere aperta una connessione TCP?

Ho due componenti che comunicano via TCP / IP. Il componente A funge da server / listener e il componente B è il client. I due dovrebbero comunicare il più rapidamente ansible. Può esserci sempre una sola connessione in qualsiasi momento (anche se questo è da parte per questa domanda). Uno sviluppatore senior della mia azienda ha affermato che è necessario utilizzare heartbeat a livello di applicazione tra i due componenti per garantire che la connessione rimanga aperta.

Ho pensato che la connessione rimanga aperta con TCP / IP, ma ho letto un numero di blog / siti che dicono che è una pratica abbastanza normale per il battito cardiaco tra queste applicazioni.

Conosco parte del motivo Il componente B di heartbeat A è in grado di informare il supporto in caso di problemi di comunicazione con il componente B (il collegamento è inattivo o il componente B non è in esecuzione). I battiti del cuore sono necessari per qualsiasi altra ragione? Tale da garantire che ci sia spesso qualcosa “nella pipa” per tenerlo aperto?

Il componente A attualmente batte il componente B ogni 20 secondi e chiude la connessione se non viene ricevuto nulla dal componente B in 120 secondi. Quindi riprende ad ascoltare le connessioni supponendo che il componente B tenterà periodicamente una riconnessione se il collegamento è interrotto. Questo funziona correttamente.

Per ribadire la mia domanda: sono necessari heartbeat per mantenere triggers una connessione TCP / IP?