Scala actor的Client-Server示例

时间:2011-06-11 16:35:20

标签: scala actor

实施以下示例的最佳方法是什么?

  • 演员server收到Requests, 处理它们,创建一个新的Response 对于每个Request并发送ResponseRequest发件人。

  • 演员client发送Requests和 收到Responses

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

这只是一个例子,所以它不应该处理所有这些情况,例如server失效,client被卡住等等。它应该只是简洁和富有表现力。

1 个答案:

答案 0 :(得分: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的参与者也是异步的。他们只是阻止线程,等待新消息。