2012-12-30 23 views
6

मैं जावा एनआईओ का उपयोग कर एक सर्वर लिख रहा हूं, और मेरे पास कुछ प्रश्न हैं जिन्हें मैं जवाब नहीं पा रहा हूं।जावा एनआईओ और एसएसएल

सबसे पहले, एसएसएलईजीएनएएन के बारे में, अलग-अलग धागे में NEED_TASK को कैसे संभालें? जब मैं अलग-अलग धागे में कार्य करता हूं तो वे पूरा करते हैं, लेकिन मुझे नहीं पता कि एक और हैंडशेक ऑपरेशन करने के लिए वापस कैसे जाना है। एक विकल्प उस ऑपरेशन को उस थ्रेड से कॉल करना होगा जो प्रतिनिधि कार्य कर रहा था, लेकिन मुझे लगता है कि ऐसा करने का तरीका नहीं है।

एक और सवाल विभिन्न थ्रेड से चयनकर्ता थ्रेड से interestOps() पर कॉल करने के बारे में है। चैनल को लिखने के प्रयास के बाद मुझे सभी रुचियों को लिखने के बाद महत्वपूर्ण हितों को बदलने की जरूरत है। मैंने रोक्स एनआईओ ट्यूटोरियल जैसे कुछ प्रकार के कतारों का उपयोग करने के बारे में सोचा, लेकिन मैंने यहां एक और धागे में पढ़ा है कि यह सबसे अच्छा तरीका नहीं है।

+1

क्लोज-मतदाता के लिए: यह वास्तव में एक असली सवाल है, भले ही आप इसे व्यक्तिगत रूप से समझ न सकें। – EJP

उत्तर

3

एसएसएलईजीएनएएन के बारे में पहले, अलग थ्रेड में NEED_TASK को सही तरीके से कैसे संभालें। जब मैं अलग-अलग धागे में कार्य करता हूं तो वे पूरा करते हैं, लेकिन मुझे नहीं पता कि एक और हैंडशेक ऑपरेशंस करने के लिए वापस कैसे जाना है।

जबकि इंजन NEED_TASK स्थिति में है, यह कुछ और नहीं कर सकता है। जब कार्य पूरा हो जाता है तो आपको उस ऑपरेशन को दोहराया जाना चाहिए जो मूल रूप से NEED_TASK लौटा और इंजन को आपको बताए कि आगे क्या करना है। जब तक कार्य पूरा नहीं हो जाता है, तब तक आपको उस इंजन के अन्य थ्रेड द्वारा ब्लॉक को अक्षम या अक्षम करने की आवश्यकता होती है, यानी उस चैनल पर चयन न करें।

एक और सवाल विभिन्न थ्रेड से चयनकर्ता थ्रेड से ब्याजऑप्स() को कॉल करने के बारे में है। चैनल को लिखने के प्रयास के बाद मुझे सभी रुचियों को लिखने के बाद महत्वपूर्ण हितों को बदलने की जरूरत है। मैंने रोक्स एनआईओ ट्यूटोरियल में बदलावों के कुछ प्रकार के कतारों का उपयोग करने के बारे में सोचा, लेकिन मैंने यहां एक और धागे में पढ़ा है कि यह सबसे अच्छा तरीका नहीं है।

यह मुझे होता। मुझे उन कतारों से नफरत है। मैं सिर्फ चयनकर्ता() चयनकर्ता और ब्याज को बदलता हूं, कभी उसमें कोई समस्या नहीं देखी गई। चयनकर्ता थ्रेड को शून्य कुंजी के साथ सही ढंग से सामना करना पड़ता है, लेकिन इसे पहले से ही करने की ज़रूरत है।

+0

मुझे इस समाधान में भी रूचि है। कोई कामकाजी उदाहरण? –

+0

मुझे यकीन नहीं है कि आप इनमें से किन समाधानों का उल्लेख करते हैं, लेकिन मेरे पास एक SSLSocketChannel/SSLSelector/SSLServerSocketChannel उत्पाद का पूर्ण, व्यावसायिक रूप से उपलब्ध कार्यान्वयन है जो आंतरिक रूप से SSLENGINE का उपयोग करता है और चयनकर्ता प्रदाता के रूप में पैक किया जाता है। अनुरोध पर विवरण। – EJP

+0

दूसरा उत्तर स्पष्ट है, और यही वह है जो मैं करने जा रहा हूं। पहले के बारे में मुझे अभी भी कुछ संदेह हैं। मुझे पिछले ऑपरेशन को फिर से शुरू करना होगा जिसे NEED_TASK कहा जाता है जो स्पष्ट है, लेकिन मुझे नहीं पता कि यह कैसे करना है, केवल एक चीज जिसे मैं सोच सकता हूं, इसे पूरा करने वाले थ्रेड से फिर से शुरू कर रहा है, लेकिन इससे पढ़ने/लिखने का निष्पादन बढ़ जाएगा चयनकर्ता धागा। क्या आप मुझे शायद कुछ संकेत दे सकते हैं कि – user1418979