2009-09-30 19 views
7

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

एक सहयोगी को एक ही समस्या का सामना करना पड़ा और कहा कि वह इस तरह की चीज़ों का पता लगाने के लिए लाइन पर दिल की धड़कन का उपयोग करता है, लेकिन मुझे उम्मीद है कि एक आसान तरीका है। किसी और ने इस समस्या का सामना किया है?

कुछ अतिरिक्त जानकारी: मेरा वर्तमान सर्वर डिज़ाइन एक कुंजी रद्द कर देगा और संबंधित चैनल को बंद कर देगा यदि इसे पढ़ने/लिखने के ऑपरेशन का प्रयास करते समय IOException पकड़ता है। यह दृष्टिकोण 99% समय पर काम करता प्रतीत होता है; मैंने केवल कुछ हद तक परिस्थितियों को देखा है जहां कनेक्शन खुला रहता है।

उत्तर

6

ऐप स्तर के दिल की धड़कन के बिना, आपका एकमात्र विकल्प टीसीपी रखरखाव पर भरोसा करना है। लेकिन डिफ़ॉल्ट अंतराल बहुत लंबा है (2 घंटे की तरह)। आरएफसी 2 घंटे से कम अंतराल की सिफारिश नहीं करता है।

आप इसे छोटा कर सकते हैं लेकिन यह एक सिस्टम-व्यापी पैरामीटर है। कुछ ओएस पर, इसे बदलने के लिए कर्नेल पुनर्निर्माण की भी आवश्यकता होती है।

इसलिए, किसी भी टीसीपी-आधारित प्रोटोकॉल के लिए हृदय-धड़कन की अत्यधिक अनुशंसा की जाती है।

+0

धन्यवाद जेडजेड कोडर - यही मैंने सोचा (डर)। मैं बहुत आश्चर्यचकित हूं कि यह टीसीपी की विशेषता नहीं है। – Adamski

+0

बल्कि "पिंग", ये अनुप्रयोग मानव नहीं हैं - आपको पता है। –

संबंधित मुद्दे