2011-12-08 9 views
5

मेरे पास एक जावा प्रोग्राम है जिसे लगातार बाहरी सिस्टम से यूडीपी डेटा भेजा जा रहा है।जावा डेटाग्राम सॉकेट पर प्राप्त बफर को "साफ़ करें" कैसे करें?

समय-समय पर, हमें डेटा प्राप्त करना बंद करना होगा (क्योंकि दूसरी मशीन इसे संभालने वाली है)। उन समय के दौरान, मेरा सॉकेट रीडर थ्रेड नींद पाश में जाता है। जब पैकेट प्राप्त करना शुरू करने का समय होता है, तो मैं socket.receive(Packet) में फिर से जाता हूं और पैकेट से भरा बफर प्राप्त करता हूं जो मुझे को संभालना चाहिए। (डेटा "स्टॉप टाइम" में आया था।)

क्या डेटाग्राम सॉकेट के बफर को साफ़ करने का कोई तरीका है?

यदि नहीं, तो सबसे अच्छा विकल्प क्या है? जब मैं प्रतीक्षा स्थिति में जाता हूं तो बफर आकार को 0 पर सेट करता हूं और जब मैं फिर से सर्विस पैकेट शुरू करता हूं तो इसे वापस लाता हूं? सॉकेट बंद करें जब मैं वापस आऊंगा और जब मैं वापस आऊंगा तो एक नया खोलूं?

उत्तर

4

सॉकेट पर डाउनटाइम होने की बजाय, जो भी कोड पैकेट को संसाधित करता है, उस पर डाउनटाइम रखें।

तो सॉकेट सामान्य रूप से प्राप्त होता है, लेकिन यदि यह डाउनटाइम पर है, तो यह तुरंत पैकेट को छोड़ देता है।

बिल्कुल सही समाधान नहीं है, लेकिन यह कार्यान्वित करना वास्तव में आसान है और यह उपयोगी हो सकता है क्योंकि यह विभिन्न मामलों में विभिन्न प्रकार के पैकेट स्वीकार करने के लिए अन्य मामलों में नोड खोलता है।

+0

मुझे यह पसंद है। मशीन को वैसे भी डेटा मिल जाता है और वास्तविक सॉकेट-आईओ तुलना में काफी सस्ते है (यदि सही तरीके से किया जाता है :-)। हालांकि, ऐसा लगता है कि यह अभी भी "स्टॉप टाइम" और "अन्य मशीन" के साथ दौड़-परिस्थितियों में परिणाम हो सकता है जब तक कि पैकेट में अतिरिक्त जानकारी न हो, यह निर्धारित करने के लिए कि उन्हें कौन नियंत्रित करना चाहिए ... –

+0

@pst मानते हैं कि पैकेट्स में कुछ प्रकार है उनके बारे में जानकारी की पहचान करने के बाद, जो भी सिग्नल इसे बंद कर देता है उसे यह बताने में सक्षम होना चाहिए कि "आईडी 1400000 आईडी के बाद पैकेट स्वीकार न करें" या कुछ। इसमें 1399 999 संसाधित होने का अतिरिक्त लाभ है, भले ही इसमें देरी हो और हत्या संकेत मिलने के बाद नोड्स तक पहुंच जाए। – corsiKa

+0

@pst हां, उस दौड़ की स्थिति है। सौभाग्य से, स्विचओवर बहुत ही कम होता है (यह क्लस्टर का हिस्सा होता है और प्राथमिक होने पर ट्रिगर होता है और हमें गर्म बैकअप पर जाना होगा)। उन समय के दौरान थोड़ा सा डेटा खोना स्वीकार्य है (सटीक शुद्धता की आवश्यकता नहीं है, लेकिन हम इसे यथासंभव सटीक रखना चाहते हैं और निश्चित रूप से गिनती नहीं करना चाहते हैं)। –

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