2009-05-14 7 views
78

मेरे पास दो घटक हैं जो टीसीपी/आईपी के माध्यम से संवाद करते हैं। घटक एक सर्वर/श्रोता और घटक बी के रूप में कार्य करता है ग्राहक है। दोनों को जितनी जल्दी हो सके संवाद करना चाहिए। किसी भी समय केवल एक कनेक्शन हो सकता है (हालांकि यह इस प्रश्न के लिए अलग है)। मेरी कंपनी के एक वरिष्ठ डेवलपर ने कहा है कि कनेक्शन को खोलने के लिए मुझे दो घटकों के बीच आवेदन स्तर की दिल की धड़कन का उपयोग करने की आवश्यकता है।क्या मुझे टीसीपी कनेक्शन को खोलने के लिए दिल की धड़कन की आवश्यकता है?

मैंने सोचा था कि कनेक्शन टीसीपी/आईपी के साथ खुला रहता है लेकिन मैं ब्लॉग/साइटों की एक संख्या पढ़ा है और कहा कि यह इन आवेदनों के बीच दिल की धड़कन के लिए सुंदर मानक अभ्यास है।

मैं जानता हूँ कि कारण घटक एक दिल की धड़कन घटक बी का हिस्सा तो यह अगर वहाँ घटक बी (या तो लिंक नीचे है या घटक बी नहीं चल रहा है) के साथ संचार समस्याएं हैं सहायता को सूचित कर सकते हैं। क्या किसी अन्य कारण से दिल की धड़कन की आवश्यकता है? ऐसा सुनिश्चित करने के लिए कि इसे खोलने के लिए अक्सर "पाइप में" कुछ होता है?

घटक एक वर्तमान में हर 20 सेकंड के घटक बी दिल की धड़कन और कनेक्शन है, तो कुछ भी नहीं है 120 सेकंड में घटक B से वापस प्राप्त होता है बंद कर देता है। यह तब धारणा के तहत कनेक्शन के लिए सुनना शुरू कर देता है कि लिंक बी टूटने पर समय-समय पर पुन: कनेक्ट करने का प्रयास करेगा। यह सफलतापूर्वक काम करता है।

मेरे सवाल दोहराना करने के लिए: दिल की धड़कन एक टीसीपी/आईपी कनेक्शन जीवित रखने के लिए आवश्यक है?

+1

क्या यह व्यवहार भी कार्यान्वयन पर निर्भर हो सकता है? क्या यह कुछ टीसीपी मानक में निर्दिष्ट है, या इसे कार्यान्वयन विस्तार के रूप में छोड़ दिया गया है? उम्मीद है कि कोई और भी इसका जवाब दे सकता है। – dss539

+0

यह एक कार्यान्वयन विस्तार है जो मैं कहूंगा कि सभी टीसीपी/आईपी आधारित प्रोटोकॉल लागू नहीं होते हैं, यह पूरी तरह से आपके ऊपर छोड़ दिया जाता है। – Lloyd

+3

हां - टीसीपी/आईपी के कारण नहीं - लेकिन अन्य हार्डवेयर या सॉफ़्टवेयर की वजह से आप कनेक्शन जैसे फ़ायरवॉल और घर 'राउटर' से गुजर सकते हैं जो निष्क्रिय टीसीपी कनेक्शन को छोड़ देते हैं, संबंधित: http://stackoverflow.com/questions/ 3907537/रखें-जिंदा-टीसीपी-आईपी-कनेक्टेड-सॉकेट-ओवर-द-इंटरनेट-कब-कैसे-और-कितना/5149662 # 5149662 – markmnl

उत्तर

45

कनेक्शन परवाह किए बिना खुला रहना चाहिए लेकिन हाँ यह प्रोटोकॉल मदद करने के लिए मृत कनेक्शन, उदाहरण के लिए PING कमांड के साथ आईआरसी का पता लगाने में एक दिल की धड़कन लागू करते हुए देखना अक्सर आम है।

+31

रखरखाव के लिए एक और आम कारण है कि कनेक्शन को गेटवे के माध्यम से कनेक्शन खोलें। जबकि टीसीपी को खुद को संचालित करने के लिए रखरखाव की आवश्यकता नहीं होती है, लेकिन नेट गेटवे के लिए दिए गए टाइमआउट के बाद एक टीसीपी कनेक्शन "ड्रॉप" करना आम बात है। – nos

+2

सामान्य टाइमआउट क्या है? सेकंड, मिनट, घंटे? आमतौर पर – MiniGod

+2

सेकेंड। – Lloyd

1

टाइमआउट सेट करने का प्रयास करते समय आप दिल की धड़कन को कॉल करते हैं। आपकी सॉकेट खुली दिखाई दे सकती है, लेकिन दूसरे छोर पर व्यक्ति बीएसओडी पीड़ित हो सकता है। निष्क्रिय ग्राहकों/सर्वरों का पता लगाने का सबसे आसान तरीका एक टाइमआउट सेट करना है और यह सुनिश्चित करना है कि हर बार एक संदेश प्राप्त होता है।

कुछ लोग उन्हें एनओयूपी (नो ओपीएस) कहते हैं।

लेकिन नहीं, वे कनेक्शन को जीवित रखने के लिए आवश्यक नहीं हैं, केवल यह जानना उपयोगी है कि स्थिति क्या है।

+1

मुझे लगता है कि एफ़टीपी में विशेष रूप से एक एनओओपी कमांड है – Lloyd

0

कनेक्शन खुला रहेगा - एक दिल की धड़कन को लागू करने की कोई जरूरत नहीं है, और सबसे अनुप्रयोगों कि सॉकेट उपयोग करती हैं इसलिए ऐसा नहीं करते हैं।

3

क्या टीसीपी/आईपी कनेक्शन जिंदा रखने के लिए आवश्यक दिल की धड़कन हैं?

वे कनेक्शन के मरने पर पता लगाने के लिए उपयोगी हैं।

10

आपको दिल की धड़कन खुद को भेजने की आवश्यकता नहीं है। उपयोग के बावजूद टीसीपी कनेक्शन खुला रहेगा।

ध्यान दें कि टीसीपी एक वैकल्पिक keepalive तंत्र लागू करता है, जिसका उपयोग समय-समय पर बंद कनेक्शन की पहचान करने के लिए किया जा सकता है, बजाय आपको कुछ बाद की तारीख में डेटा भेजने की आवश्यकता होती है और केवल तभी कनेक्शन बंद हो जाता है।

+0

लिनक्स पर काम करने का अनुमान कैसा लगता है? क्या यह वास्तव में काम करता है? क्या मैं टाइमआउट को 2 घंटे से कम समय निर्धारित कर सकता हूं? उदाहरण के लिए 30 सेकंड? –

+0

इसके लिए आवेदन करने के लिए रखरखाव का समर्थन करने के लिए आवेदन की जरूरत है। लिनक्स में बस इसे सक्षम करना पर्याप्त नहीं होगा। –

-2

बहुत सारे प्रोटोकॉल दिल की धड़कन या स्वास्थ्य स्थिति के प्रकार को लागू करते हैं जैसे लॉयड ने कहा। जैसा कि आप जानते कनेक्शन अभी भी खुला है और अगर आप कुछ भी

1

मैं कहूंगा कि यदि आप एक दिल की धड़कन की जरूरत नहीं है, यह अगर आपके टीसीपी/आईपी कनेक्शन खुला है या नहीं कोई फर्क नहीं पड़ता खो चुके होंगे।

1

टीसीपी प्रोटोकॉल के लिए हार्टबीट की आवश्यकता नहीं है। यह कार्यान्वयन यह पता लगाने के लिए है कि क्या अन्य लोगों ने गैर मानक तरीके से कनेक्शन को समाप्त कर दिया है (यानी आंसू प्रक्रिया के माध्यम से नहीं गए)।

2

टीसीपी कनेक्शन को जिंदा रखेगा। आवेदन दिल की धड़कन विफलता, लोड संतुलन, या प्रशासकों को संभावित समस्याओं के बारे में चेतावनी देने जैसे अनुप्रयोग स्तर के विचारों के लिए हैं।

44

के रूप में कई अन्य लोगों का उल्लेख किया है, TCP कनेक्शन रहने अगर अपने स्वयं के उपकरणों के लिए छोड़ दिया जाएगा। हालांकि, अगर आपके पास कनेक्शन के मध्य में कोई डिवाइस है जो अपने राज्य को ट्रैक करता है (जैसे फ़ायरवॉल), तो राज्य तालिका प्रविष्टि को समाप्त होने से रोकने के लिए आपको रखरखाव की आवश्यकता हो सकती है।

+0

टीसीपी कनेक्शन हमेशा के लिए जिंदा कहेंगे? – user7817808

1

टीसीपी/आईपी के रूप में एक प्रोटोकॉल के रूप में बंद कर दिया नहीं किया जा रहा निर्दिष्ट किया जाता है जब तक आप एक करीबी पैकेट भेज। स्पॉट वायरलेस या इंटरनेट कनेक्शन होने के बाद भी मेरे पास सॉकेट खुला रहता है।

हालांकि, यह सब कार्यान्वयन पर बहुत निर्भर है। सबसे अधिक संभावना है कि "टाइमआउट" होगा जिसका मतलब कनेक्शन "मृत" होने पर विचार करने से पहले प्रतिक्रिया के लिए अधिकतम समय है। कभी-कभी यह एप्लिकेशन पर आधारित होता है, कभी-कभी एनएटी राउटर पर।

इसलिए, मैं अत्यधिक तुम एक "दिल की धड़कन" बुरा कनेक्शन का पता लगाने और उन्हें खुला रखने के लिए रखने की सलाह देते हैं जाएगा।

3

दिल की धड़कन सर्वर को बताने का एक अच्छा तरीका है कि आप जीवित हैं, जिससे मेरा मतलब है कि, यदि सर्वर DoS हमले रोकथाम सिस्टम का उपयोग कर रहा है, तो यह (सर्वर) उस विशेष कनेक्शन के लिए आवंटित संसाधनों को हटा सकता है, एक निश्चित अवधि के लिए गतिविधि में पता चला के बाद।
किसी भी दिल की धड़कन तंत्र को लागू करने के लिए उनके पास कोई जनादेश नहीं है।

लेकिन इसकी अच्छा है अगर आप एक आवेदन, मुख्य मानदंड जवाबदेही है, जहां रचना कर रहे हैं। आप कनेक्शन सेटअप, DNS लुकअप और पथ-खोजों पर समय बर्बाद नहीं करना चाहेंगे। बस हर समय एक कनेक्शन रखें, दिल की धड़कन भेजते रहें, और एप्लिकेशन जानता है कि कनेक्शन जिंदा है, और कनेक्शन-सेटअप की आवश्यकता नहीं है। बस सरल भेजें और प्राप्त करें।

9

अपने का उपयोग कर खिड़कियों, टीसीपी के बारे में रखें जिंदा सावधान रहना है। डिफ़ॉल्ट रूप से, जब तक आप इसे विंडोज रजिस्ट्री या सेटॉकटॉप के माध्यम से वैश्विक रूप से चालू नहीं करते हैं, तब तक यह अक्षम हो जाता है।

डिफ़ॉल्ट रख-रखाव अंतराल 2 घंटे है।

http://msdn.microsoft.com/en-us/library/ms819735.aspx

आप अपनी खुद की दिल की धड़कन को लागू करने और अक्षम कर टीसीपी जीवित-रखें खिड़कियों पर यदि 2 घंटे रखें जिंदा जिंदा वांछनीय नहीं है की आवश्यकता हो सकती।

2

मूल रूप से एक TCP कनेक्शन मार्ग के साथ स्विच में संग्रहीत लिंक राज्यों पैदा करता है। टूटे हुए कनेक्शन का पता लगाने के लिए (जैसे कि जब एक समकक्ष दुर्घटनाग्रस्त हो जाता है (उचित डिस्कनेक्ट किए बिना), इन राज्यों को निष्क्रियता की अवधि के बाद बेदखल कर दिया जाना चाहिए। और जब ऐसा होता है, तो आपका टीसीपी कनेक्शन बंद कर दिया गया है। हालांकि मैं बिल्कुल नहीं बता सकता कि ये टाइमआउट कितने समय तक हैं, वे डिवाइस-उत्पादकों और/या इंटरनेट प्रदाताओं पर निर्भर करते हैं। मुझे याद है कि मेरे निष्क्रिय एसएसएच टर्मिनल सत्र तेजी से (निष्क्रिय समय के 15 मिनट से कम) मेरे पूर्व 1 & 1 इंटरनेट प्रदाता द्वारा बंद किए गए थे, जबकि वे केबेल-बीडब्ल्यू कनेक्शन प्रदान करते समय कई घंटों तक खुला रहे ...

अंत में, मैं अपने पिछले वक्ताओं के साथ निष्कर्ष निकाला हूं: दिल की धड़कन यह बताने का एक अच्छा तरीका है कि कोई कनेक्शन अभी भी जिंदा है और लात मार रहा है ...

17

अपने घटक हैं:

  • एक पारंपरिक वायर्ड नेटवर्क में हैं
  • वहाँ दुर्घटना

तो आप की जरूरत नहीं है कोई फ़ायरवॉल या

  • न उनमें से उन दोनों के बीच नेट रूटर हैं दिल की धड़कन करने के लिए।

    यदि इनमें से कोई भी धारणा झूठी है (मैं आपको देख रहा हूं, जीपीआरएस!), दिल की धड़कन जल्दी से जरूरी हो जाती है।