Ответ клиенту-исполнителю не передается.

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

Сервер:

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

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

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


person Gamlor    schedule 06.10.2011    source источник


Ответы (1)


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

person Viktor Klang    schedule 06.10.2011
comment
Да, хорошо. Это приносит ожидаемое поведение. знак равно - person Gamlor; 06.10.2011