2011-04-11 13 views
6

मैं एक ऐसे अभिनेता को डिजाइन कर रहा हूं जो अंतहीन धारा से वस्तुओं का उपभोग करता है, और इसे शुरू करने पर नियंत्रण करने के तरीके की आवश्यकता होती है और संदेशों का उपयोग बंद कर देती है। अभिनेताओं के साथ इस तरह के अंतःस्थापित loops को लागू करने के लिए एक आम पैटर्न है? मैं सिर्फ अपने अभिनेता को संदेश भेजने के बारे में सोच रहा था। जैसे (छद्म स्काला) कुछ:कलाकारों का उपयोग कर इंटरप्टिबल लूप के लिए पैटर्न

class Interruptible extends Actor { 
    val stream: Stream 
    val running: boolean 

    def receive = { 
    case "start" => { 
     running = true 
     consumeItem 
    } 

    case "stop" => { 
     running = false 
    } 

    case "consumeNext" => consumeItem 
    } 

    def consumeItem { 
    if (running) { 
     stream.getItem 
     this ! "consumeNext" 
    } 
    } 
} 

इस चीजों के बारे में जाने के लिए सबसे अच्छा तरीका है?

धन्यवाद!

+2

हमारे नवीनतम आंकड़ों के अनुसार अक्का एक 8core मशीन पर प्रति सेकंड के बारे में 3 लाख संदेशों करता है। क्या आप वाकई समय से अनुकूलन नहीं कर रहे हैं? –

+0

आपके उत्तर के लिए धन्यवाद, विक्टर। मैंने डिजाइन के बारे में सवाल उठाने के लिए दोहराया। बस अभिनेता मॉडल के साथ पकड़ने की कोशिश कर रहा है! अक्का महान है, बीटीडब्ल्यू। -D – spieden

उत्तर

8

शायद इस तरह इनकोडिंग:

class Interruptible extends Actor { 
    val stream: Stream 

    def inactive: Receive = { // This is the behavior when inactive 
    case "start" => 
     self become active 
    } 

    def active: Receive = { // This is the behavior when it's active 
    case "stop" => 
     self become inactive 
    case "next" => 
     doSomethingWith(stream.getItem) 
     self ! "next" 
    } 

    def receive = inactive // Start out as inactive 
} 

चीयर्स,

+0

बहुत अच्छा लगता है, धन्यवाद। – spieden

+0

महान दिखता है, लेकिन लालित्य को संरक्षित करने के लिए "स्वयं सक्रिय कैसे हो सकता है" लागू किया जा सकता है? स्कैला 2.10 के साथ आने वाले अक्का में विधि 'बन' नहीं मिली। या यह एक छद्म कोड है? – dmitry

+2

यह अक्का 2.0 के साथ "संदर्भ" में स्थानांतरित हो गया। http://doc.akka.io/docs/akka/2.1.2/scala/actors.html#Become_Unbecome –

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