Ответ не передается обратно «клиенту» -актеру - PullRequest
2 голосов
/ 06 октября 2011

У меня неожиданное поведение при использовании удаленных актеров.У меня есть сервер и «клиент».Клиент отправляет сообщение субъекту сервера, и сервер отвечает.Когда я использую '?'Оператор все работает как положено.Я получаю ответ с сервера.

Сервер:

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])
}

Клиент:

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

Теперь я изменил код, чтобы клиент был актером и просто реагировал на ответ.Однако не ответ не отправляется обратно клиенту.Вместо этого на сервере создается экземпляр ClientActor, и ответ отправляется туда?

Модифицированный клиент:

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"
}

Чего мне не хватает?Это ожидаемое поведение Акки?И как я могу заставить его отправить ответ обратно клиенту?

Спасибо за любой вклад.

1 Ответ

5 голосов
/ 06 октября 2011

Вы не запустили удаленное взаимодействие на клиенте.

...