2011-10-06 1 views
2

J'ai un comportement inattendu lorsque j'utilise des acteurs distants. J'ai un serveur et un 'client'. Le client envoie un message à l'acteur serveur et le serveur répond. Quand j'utilise le '?' opérateur tout fonctionne comme prévu. Je reçois la réponse du serveur.La réponse n'est pas transmise à l'acteur 'client'

Le serveur:

class HelloWorldActor extends Actor { 
    def receive = { 
    case msg => self reply (msg + " World") 
    } 
} 

object Server extends App{ 
    Actor.remote.start("localhost",2552); 
    Actor.remote.register("hello-service",Actor.actorOf[HelloWorldActor]) 
} 

Le client:

object Client extends App { 
    // client code 
    val actor = remote.actorFor(
    "hello-service", "localhost", 2552) 
    val result = (actor ? "Hello").as[String] 
    println(result) 
} 

Maintenant, je changé le code afin que le client est un acteur et réagit simplement à la réponse. Cependant, la réponse n'est pas renvoyée au client. A la place, une instance 'ClientActor' est créée, le serveur et la réponse est envoyée là?

Le client modifié:

class ClientActor extends Actor { 
    def receive = { 
    case "Ask" =>{ 
     val actor = remote.actorFor(
     "hello-service", "localhost", 2552) 
     actor ! "Hello" 
    } 
    case response:String => println(response) // This executed on the server! That's not what I expect? 
    } 
} 

object Client extends App { 
    // client code 
    val client = actorOf[ClientActor].start(); 
    client ! "Ask" 
} 

Qu'est-ce que je manque? Est-ce le comportement attendu d'Akka? Et comment puis-je le forcer à renvoyer la réponse au client?

Merci pour toute contribution.

Répondre

5

Vous n'avez pas démarré la communication à distance sur le client.

+0

Ok, oui. Cela apporte le comportement attendu. =) – Gamlor

+0

Happy hAkking !! –

Questions connexes