2011-06-11 19 views
7

¿Cuál es la mejor manera de implementar el siguiente ejemplo?Ejemplo de cliente-servidor con los actores de Scala

  • Actor server recibe Requests, los maneja, crea un nuevo Response para cada Request y envía el Response volver a la Request remitente.

  • Actor client envía Requests y recibe Responses.

Todo esto comunicación es asíncrono y por lo tanto utiliza react.

Esto es sólo un ejemplo y por lo tanto no debería manejar todos los casos como server está caído, client está atascado, etc. Debe ser solo conciso y expresivo.

Respuesta

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

Uso:

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

En lo que respecta a:

Toda esta comunicación es asíncrona y por lo tanto utiliza reaccionar.

Los actores que usan receive también son asíncronos. Simplemente bloquean el hilo, esperando un mensaje nuevo.

Cuestiones relacionadas