2011-06-11 57 views
7

实现以下示例的最佳方法是什么?斯卡拉演员的客户端 - 服务器示例

  • 演员server接收Requests, 处理它们,创建一个新的Response 每个Request并将Response回到 到Request发件人。

  • 演员client发送Requests和 收到Responses

所有这些通信都是异步的,因此它使用react

这只是一个例子,所以它不应该处理像server下降,client卡住等所有这些情况。它应该只是简洁和表达。

回答

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

用法:

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

至于:

所有这些通信是异步 ,因此它使用反应。

使用receive的参与者也是异步的。他们只是阻止线程,等待一条新消息。