Пример клиент-сервер с акторами Scala

Как лучше всего реализовать следующий пример?

  • Актер server получает Requests, обрабатывает их, создает новый Response для каждого Request и отправляет Response обратно отправителю Request.

  • Актер client отправляет Requests и получает Responses.

Вся эта связь является асинхронной и, следовательно, использует react.

Это всего лишь пример, поэтому он не должен обрабатывать все такие случаи, как server не работает, client зависает и т. д. Он должен быть кратким и выразительным.


person Michael    schedule 11.06.2011    source источник


Ответы (1)


import scala.actors._
import Actor._

case class SendRequest(rid: String)
case class Request(rid: String)
case class Response(rid: String)

val server = actor {
   eventloop {
         case Request(rid) => 
            println("Server got request [%s] from client" format(rid))
        sender ! Response(rid)  
      }
   }   
}

val client = actor {
   eventloop {
         case SendRequest(rid) => server ! Request(rid)
         case Response(rid) => 
            println("Client got response [%s] from server" format(rid))
      }
   }
}

Использование:

scala> client ! SendRequest("Hello!")
Server got request [Hello!] from client
Client got response [Hello!] from server

Что касается:

Все это общение является асинхронным и, следовательно, использует реакцию.

Актеры, использующие receive, также являются асинхронными. Они просто блокируют ветку, ожидая новых сообщений.

person Vasil Remeniuk    schedule 11.06.2011