2013-05-29 3 views
5

Ich bin ziemlich neu in Akka und ich hätte gerne Unterstützung für eine Designentscheidung für meine Anwendung. Ich habe eine ziemlich typische Client/Server-Anwendung. Zu Beginn sollte der Client in der Lage sein, sich auf Anwendungsebene zu authentifizieren, und danach sollte er in der Lage sein, im normalen Betriebsmodus zu laufen. Es gibt auch andere Zustand wie Schließen, getrennt, etc. pp.Akka Design für Authentifizierung (Finite State Machine)

Im Moment habe ich realisiert dies mit become()

public class MyServerActor extends UntypedActor { 
    Procedure<Object> normal = new Procedure<Object>() { 
    @Override 
    public void apply(Object msg) { 
     handleMessage(msg); 
    } 
    }; 

    @Override 
    public void onReceive(Object msg) throws Exception { 
    if (msg instanceof LoginMessage) { 
     // do login stuff, assume the login was successful 
     getContext().become(normal); 
    } 

So würde ich einen anderen Procedure für einen anderen Zustand verwenden. Allerdings gibt es im Dokument unter http://doc.akka.io/docs/akka/snapshot/java/fsm.html eine Beschreibung der Finite State Machine, die so ähnlich funktioniert wie eine Standard-Zustandsmaschine; Abhängig vom Staat bestimmte Aktionen.

Ich frage mich, welche ist der bessere Ansatz? Oder wie ist der übliche Ansatz, eine Client/Server-Anwendung in Akka mit Java zu implementieren?

Antwort

1

Wenn Sie sich für einen zustandsbasierten Ansatz entscheiden, verwenden Sie Procedure und become. Es wird deutlich, dass Sie sich in einem bestimmten Status befinden, da der gesamte Code für diesen Status gruppiert ist.