2016-05-09 6 views
8

हम अपने ग्राहकों को सर्वर से डिस्कनेक्ट करना चाहते हैं।जावा ने कई उपयोगकर्ता सत्रों को बंद करने के लिए अनुशंसित तरीका

तो हम सत्र, जो मूल रूप से की तरह कुछ आदेश शामिल करने के लिए कुछ संदेश भेजा "अपने आप को बंद" एल

तो सामान्य रूप में मैं कुछ इस तरह करते हैं:

for (Session session : sessions) { 
     closeSession(session); 
     while(!verifyClosed(session)){ 
      closeSession(session); 
      retries++; 
      if(retries==10){ 
       retries = 0; 
       break; 
      } 
     }; 
    } 

अब मैं चाहते हैं प्रत्येक सत्र के लिए कुछ सिगरम हत्या विधियों को करने से पहले बंद होने के लिए कुछ सेकंड दें (मान लें 5)।

तो क्या पसंदीदा तरीका होगा:

  1. प्रत्येक सत्र के पास प्रक्रिया के लिए 5 सेकंड देरी की एक अधिकतम के साथ पाश कर।

    या

  2. प्रत्येक सत्र के लिए प्रारंभ एक धागा कि इस प्रक्रिया इतनी सत्र एक ही समय में बंद किया जाना चाहिए है।

    for (Session session : sessions) { 
        startClosingThread(session); 
    } 
    

अद्यतन:

मैं नोटिस जो कुछ प्रयोक्ताओं के झूठमूठ शब्द "सत्र" पर ज्यादा करने के लिए काट दिया, समस्या SessionHandling नहीं है। अगर मैं एक बंद संदेश भेजता हूं या सॉकेट डिस्कनेक्ट करता है तो इससे कोई फर्क नहीं पड़ता। यह समस्या नहीं है।

आप उपयोगकर्ता शब्द के साथ सत्र शब्द को प्रतिस्थापित कर सकते हैं।

मुझे कुछ सलाह की आवश्यकता है: "उपयोगकर्ता थ्रेड" को बंद करने में कुछ समय लगेगा, इसलिए अब प्रत्येक थ्रेड को बंद करने के लिए प्रतीक्षा करें और अगले चरण पर जाएं, या प्रत्येक उपयोगकर्ता के लिए शुरू करें अपने स्वयं के पुनर्निर्मित बंद करें एक ही समय में सभी धागे पर काम करने के लिए धागा।

+4

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

+1

'' sigterm' हत्या विधियों 'को मारने के लिए क्या? इस परिदृश्य में 'उपयोगकर्ता सत्र' क्या है? सॉकेट बंद करने के साथ क्या गलत है? – EJP

+0

क्लोजिंग कमांड को अवरुद्ध या गैर-अवरुद्ध करने वाला ऑपरेशन भेज रहा है? सत्रों में आपके पास किस प्रकार का कनेक्शन है कि आप कुछ सिगरम हत्या विधि कर सकते हैं? एक प्रक्रिया को मारने के लिए – Alexander

उत्तर

1

सभी सत्रों पर सत्र बंद अनुरोध भेजें, अपने पांच सेकंड प्रतीक्षा करें, फिर सभी सत्रों की जांच करें। इस तरह से सत्र बंद हो जाता है बिना नए धागे के पूरे समूह को शुरू किए समानांतर में हो सकता है।

+0

हाँ एटीएम यह इस तरह है – Gobliins

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

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