2012-11-13 37 views
6

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

मेरा प्रश्न यह संदेश प्राप्त होने पर यह 'प्रेषक' कैसे पहुंच योग्य होता है।

और साथ ही, क्या हम इस कार्यान्वयन को ओवरराइड कर सकते हैं जहां प्रेषक के साथ कुछ अन्य डेटा भी आईपैड्रेस, बंदरगाह जैसे डेटा से पहुंचा जा सकता है।

जहां तक ​​मुझे पता है, वहां कोई रास्ता नहीं है कि आप आईपैड्रेस और बंदरगाह कहां से आए हैं, जहां से संदेश आया है .. क्या कोई तरीका है जिससे हम इस प्रेषक से प्रेषक और पोर्ट नंबर के आईपैड्रेस प्राप्त कर सकते हैं?

सहायता के लिए धन्यवाद।

+0

यदि आईपी पता संदेश का हिस्सा है, तो इसे संदेश में रखना अच्छा लगेगा? –

उत्तर

1

AKKA अभिनेता प्रणाली में! डीफ़ के रूप में अधिभारित है! (संदेश: स्कैला.एनी) (निहित प्रेषक: akka.actor.ActorRef) जहां प्रेषक संदेश भेजता है। उसके बाद आप ActorRef पर पथ विधि कॉल कर सकते हैं, लेकिन मुझे नहीं लगता कि आप वहां से वास्तविक आईपी पता प्राप्त कर पाएंगे।

5

(आप वास्तव में जो अभिनेताओं यह नहीं कहा, तो मैं जवाब एक अक्का रूप में अच्छी तरह से ठीक है यह सोचते हैं रहा हूँ)

sender प्रक्रिया ActorRef जो था परोक्ष या स्पष्ट भेजने स्थल पर उठाया देता है: यदि आप एक अभिनेता के भीतर ! का उपयोग करते हैं, तो इसका implicit val self: ActorRef पाया और उपयोग किया जाता है। एक अलग ActorSystem प्राप्तकर्ता से में है कि इस जीवन, यानी यह एक दूरस्थ संदेश भेजने है, तो sender रेफरी सभी जानकारी जवाब देने के लिए आवश्यक में शामिल होंगे, तो बस अपने रास्ते पर नज़र डालें:

val s = sender // Actor[akka://<system>@<host>:<port>/user/path/to/actor] 
val p = s.path // akka://<system>@<host>:<port>/user/path/to/actor 
val a = p.address // akka://<system>@<host>:<port> 
val host = a.host // Some(<host>), where <host> is the listen address as configured for the remote system 
val port = a.port // Some(<port>), where <port> is the actual listen port of the remote system 

तो, संक्षेप में, sender.path.address.host (और पोर्ट के लिए एनालॉग) आपको जो चाहिए वह आपको देना चाहिए।

+1

दुर्भाग्यवश मैं अक्का का उपयोग नहीं कर रहा हूं ... क्या आप जानते हैं कि स्केल कलाकारों में यह कैसे किया जा सकता है? ... वैसे भी मदद के लिए धन्यवाद ... – user1822249

+3

मैंने कभी भी scala.actors के साथ रिमोटिंग का उपयोग नहीं किया है, लेकिन जो मैंने सुना है आपको अक्का में देखने में रुचि हो सकती है, यह एक उद्योग सिद्ध समाधान है। scala.actors.remote जुलाई 200 9 से छुआ नहीं गया है (सामान्य स्कैला लाइब्रेरी रिफैक्टरिंग की गणना नहीं), इसलिए मुझे लगता है कि यह कहना उचित है कि यह अनजान है। –