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.
Ok, oui. Cela apporte le comportement attendu. =) – Gamlor
Happy hAkking !! –