Saya memiliki dua komponen yang berkomunikasi melalui TCP / IP. Komponen A bertindak sebagai server / pendengar dan Komponen B adalah klien. Keduanya harus berkomunikasi secepat mungkin. Hanya ada satu koneksi setiap saat (meskipun itu dikesampingkan untuk pertanyaan ini). Pengembang senior di perusahaan saya mengatakan bahwa saya perlu menggunakan detak jantung tingkat aplikasi antara dua komponen untuk memastikan koneksi tetap terbuka.
Saya pikir koneksi tetap terbuka dengan TCP / IP tetapi saya telah membaca sejumlah blog / situs yang mengatakan itu praktik standar yang cukup untuk detak jantung antara aplikasi ini.
Saya tahu sebagian alasan komponen A detak jantung komponen B adalah agar dapat menginformasikan dukungan jika ada masalah komunikasi dengan komponen B (baik tautan mati atau komponen B tidak berjalan). Apakah detak jantung diperlukan untuk alasan lain? Seperti untuk memastikan sering ada sesuatu "di dalam pipa" untuk membuatnya tetap terbuka?
Komponen A saat ini detak jantung komponen B setiap 20 detik dan menutup koneksi jika tidak ada yang diterima kembali dari komponen B dalam 120 detik. Kemudian melanjutkan mendengarkan koneksi dengan asumsi bahwa komponen B akan secara berkala mencoba menyambung kembali jika tautan rusak. Ini bekerja dengan sukses.
Untuk mengulangi pertanyaan saya: Apakah detak jantung diperlukan untuk menjaga koneksi TCP / IP tetap hidup?
Jawaban:
Sambungan harus tetap terbuka, tetapi ya, sering kali umum untuk melihat protokol menerapkan detak jantung untuk membantu mendeteksi koneksi yang mati, IRC dengan perintah PING misalnya.
sumber
Seperti yang telah dicatat oleh banyak orang lain, koneksi TCP akan tetap aktif jika dibiarkan ke perangkatnya sendiri. Namun, jika Anda memiliki perangkat di tengah koneksi yang melacak statusnya (seperti firewall), Anda mungkin memerlukan keepalives agar entri tabel status tidak kedaluwarsa.
sumber
Jika komponen Anda:
maka Anda tidak perlu memiliki detak jantung.
Jika salah satu dari asumsi ini salah (saya melihat Anda, GPRS!), Detak jantung menjadi perlu agak cepat.
sumber
Anda tidak perlu mengirimkan detak jantung sendiri. Koneksi TCP akan tetap terbuka terlepas dari penggunaan.
Perhatikan bahwa TCP mengimplementasikan mekanisme keepalive opsional , yang dapat digunakan untuk mengidentifikasi koneksi tertutup secara tepat waktu, daripada meminta Anda untuk mengirim data di kemudian hari dan hanya kemudian menemukan koneksi ditutup.
sumber
Jika Anda menggunakan windows, berhati-hatilah dengan TCP Keep-hidup. Secara default, ini dinonaktifkan kecuali jika Anda menyalakannya secara global dengan registri windows atau melalui setsockopt.
Interval tetap hidup default adalah 2 jam.
http://msdn.microsoft.com/en-us/library/ms819735.aspx
Anda mungkin perlu menerapkan detak jantung Anda sendiri dan menonaktifkan tetap-hidup TCP di windows jika keep-hidup 2 jam tidak diinginkan.
sumber
Mereka berguna untuk mendeteksi ketika koneksi telah mati.
sumber
TCP akan menjaga koneksi tetap hidup. Detak jantung aplikasi adalah untuk pertimbangan tingkat aplikasi seperti failover, load balancing, atau memberi tahu administrator tentang potensi masalah.
sumber
Detak jantung adalah cara yang baik untuk memberi tahu server bahwa Anda masih hidup, maksud saya, jika server menggunakan sistem pencegahan serangan DoS, itu (server) dapat menghapus semua sumber daya yang dialokasikan untuk koneksi tertentu, setelah itu terdeteksi dalam aktivitas untuk jangka waktu tertentu.
Tidak ada mandat mereka untuk menerapkan mekanisme detak jantung apa pun.
Tapi bagus jika Anda mendesain aplikasi, di mana kriteria utamanya adalah responsif. Anda tidak akan suka membuang waktu untuk pengaturan koneksi, pencarian DNS, dan penemuan jalur. Di sana cukup pertahankan koneksi setiap saat, terus kirim detak jantung, dan aplikasi tahu koneksi itu hidup, dan pengaturan koneksi tidak diperlukan. Cukup kirim dan terima sederhana.
sumber
TCP / IP sebagai protokol ditentukan sebagai tidak ditutup sampai Anda mengirim paket tutup. Saya memiliki soket yang tetap terbuka bahkan setelah koneksi nirkabel atau internet tidak stabil.
Namun, ini semua sangat bergantung pada implementasi. Kemungkinan besar akan ada "batas waktu" yang berarti jumlah waktu maksimum untuk menunggu tanggapan sebelum menganggap sambungan menjadi "mati". Terkadang ini didasarkan pada aplikasi itu sendiri, terkadang pada router NAT.
Oleh karena itu, saya sangat menyarankan Anda untuk tetap "detak jantung" untuk mendeteksi koneksi yang buruk dan membuatnya tetap terbuka.
sumber
Pada dasarnya koneksi TCP membuat status tautan yang disimpan di sakelar bersama dengan rute. Untuk mendeteksi koneksi yang rusak (seperti ketika salah satu mitra crash (tanpa mengirimkan pemutusan yang tepat)), status ini harus dikeluarkan setelah periode tidak aktif. Dan ketika ini terjadi, koneksi TCP Anda telah ditutup. Meskipun saya tidak tahu persis berapa lama waktu tunggu ini, sepertinya mereka bergantung pada produsen perangkat dan / atau penyedia internet. Saya ingat sesi terminal SSH menganggur saya dengan cepat (kurang dari 15 menit waktu idle) ditutup oleh penyedia internet 1 & 1 saya sebelumnya sementara mereka tetap terbuka selama beberapa jam ketika menggunakan koneksi yang disediakan Kabel-BW ...
Akhirnya, saya menyimpulkan dengan pembicara saya sebelumnya: detak jantung adalah cara yang baik untuk mengetahui apakah koneksi masih hidup dan menendang ...
sumber
Yang Anda sebut detak jantung berguna saat mencoba menyetel waktu tunggu. Soket Anda mungkin tampak terbuka, tetapi orang di sisi lain mungkin menderita BSOD. Salah satu cara termudah untuk mendeteksi klien / server yang tidak berfungsi adalah dengan mengatur waktu tunggu dan memastikan pesan sering diterima.
Beberapa orang menyebutnya NOOPs (No Ops).
Tapi tidak, mereka tidak perlu menjaga koneksi tetap hidup, hanya membantu untuk mengetahui apa statusnya.
sumber
Saya akan mengatakan bahwa jika Anda tidak memiliki detak jantung, tidak masalah apakah koneksi TCP / IP Anda terbuka atau tidak.
sumber
Heartbeat bukanlah keharusan untuk protokol TCP. Implementasinya ada untuk mendeteksi apakah pihak lain telah menghentikan koneksi dengan cara yang tidak standar (yaitu tidak melalui proses penghancuran).
sumber
Sambungan akan tetap terbuka - tidak perlu menerapkan detak jantung, dan sebagian besar aplikasi yang menggunakan soket tidak melakukannya.
sumber
Banyak protokol yang menerapkan detak jantung atau jenis status kesehatan seperti yang dikatakan Lloyd. Sekadar info, koneksi masih terbuka dan jika Anda mungkin melewatkan sesuatu
sumber