2011-06-11 70 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的參與者也是異步的。他們只是阻止線程,等待一條新消息。