2012-08-05 5 views
16

Ich lerne Akka und ich versuche herauszufinden, wie Schauspieler miteinander reden (nennen wir sie A und B). Es ist kein Anfrage/Antwort-Szenario, A und B senden sich gegenseitig Nachrichten zu jeder Zeit.Akka actorFor vs einen DarstellerRef

Im Moment habe ich zwei Geschwister Schauspieler, die Nachrichten in beide Richtungen zueinander weitergeben. Sie sind beide direkt auf der ActorSystem erstellt. Ich hatte zunächst die ActorRef von A in den Konstruktor B übergeben. Aber ich kann die ActorRef von B nicht an den Konstruktor von A übergeben, weil es noch nicht existiert, d. H. Ich kann diese Methode nicht für zirkulare Referenzen verwenden.

Ich habe über actorFor gelesen und dies würde mich einen Schauspieler suchen lassen, der seinen Weg benutzt. Ich bin jedoch nicht mit dieser Einstellung vertraut, denn wenn sich der Pfad ändert, wird er nicht vom Compiler abgefangen.

Eine weitere Alternative, hat jeder Akteur unter Berücksichtigung Zugang zu ihm Eltern, ist es, die Nachrichten von A und B an die Eltern weitergeben und haben dann die Eltern die Nachricht übergeben zurück auf A und B. Dies koppelt jedoch die Eltern an die Nachrichtentypen, die hin und her weitergeleitet werden.

Was sind Strategien, die Menschen nutzen, um Schauspieler auf einander aufmerksam zu machen? Bin ich zu vorsichtig damit, Schauspieler auf dem Weg nach oben zu sehen?

+0

Haben Sie versucht, 'Lazy Val's bei der Instanziierung Ihrer' ActorRef' zu verwenden? Ich kann mir vorstellen, dass dies helfen würde, die zirkuläre Abhängigkeit zu lösen. Angenommen, Sie verwenden Scala natürlich ... – agilesteel

+0

Ich habe es einfach gemacht und es funktioniert. Ich wusste nicht, dass du ein Lazy Val referenzierst, bevor es definiert wird - verrücktes Zeug! Danke für den Tipp. Ich werde immer noch interessiert zu wissen, wie Leute über das Überschreiten von ActorRefs vs Pfade fühlen. – Geoff

+0

Stellen Sie sicher, dass Sie http://doc.akka.io/docs/akka/2.0.2/general/addressing.html gelesen haben. – sourcedelica

Antwort

11

In meiner bescheidenen Meinung nach haben Sie drei Strategien, die ich von der näher an der Problemliste (aber für mich auch das schlechteste Muster, es tut mir leid)

Strategie 1: Sie Schauspieler A und Schauspieler B erstellen, Übergeben von actorRef A an den Konstruktor von actor B. Ihr Ping-Pong startet von Akteur B, der eine Nachricht an Akteur A sendet, und Akteur A kann einfach mit der Absenderreferenz antworten. (Oder umgekehrt)


Strategie 2: Sie eine Ebene in Ihrer Anwendung erstellen, die sich um die Benennung nimmt: den Namen bei der Erstellung des Darstellers zuweist, sowie bei der Abfrage. Dies zentralisiert das Problem in einem einzigen Punkt.


Strategie 3: Sie fragen sich, ob zwei Geschwister Akteure Pingpong spielen nicht eine bessere, modulare Schauspieler Hierarchie ersetzt, wo im Grunde jeder Akteur kommunizieren nur mit seinen Eltern und seinen Kindern und hat keine Kenntnis über seine Geschwister.

+3

Strategie 3 klingt am sinnvollsten. Ich war ein bisschen besorgt, dass die Eltern am Ende viel Verkabelung machen würden, aber ich denke, das ist in Ordnung, weil es die Aufgabe der Eltern ist, ihre Kinder zu koordinieren (außerdem ist das Weiterleiten von Nachrichten überhaupt nicht viel Arbeit). – Geoff

Verwandte Themen