2010-03-24 7 views
5

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

समस्या यह है कि मैं एक ऐसा एप्लीकेशन विकसित करना चाहता हूं जो एक साथ कुछ हज़ार कनेक्शन को संभाले। हालांकि मैं निश्चित रूप से स्केलेबिलिटी और संदर्भ स्विचिंग की कमी के कारण प्रत्येक कनेक्शन के लिए धागा बनाना नहीं चाहता हूं।

ऐसा करने का "सही" तरीका क्या होगा। मेरी दुनिया में प्रति अभिनेता को एक थ्रेड को अवरुद्ध करने की आवश्यकता के बिना प्रत्येक कनेक्शन के लिए एक अभिनेता होना संभव होना चाहिए।

उत्तर

4

मेरे पास एक ऐसा एप्लिकेशन है जो गैर-अवरुद्ध सॉकेट (यानी एनआईओ) के साथ अभिनेताओं को मिश्रित करता है। जिस तरह से मैंने यह किया है वह एक समर्पित आईओ थ्रेड है, जो रिएक्टर पैटर्न का उपयोग करके अभिनेताओं को संदेश भेजता है (वैसे ही यह जावा सिस्टम में थ्रेड पूल में काम करेगा)।

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

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

6

"प्रोग्रामिंग स्कैला" पुस्तक में लेखकों ने नागगटी नामक एक पुस्तकालय का उपयोग किया जो एक ढांचा प्रदान करता है जो एनआईओ और अभिनेताओं, http://programming-scala.labs.oreilly.com/ch09.html को जोड़ता है।

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