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


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


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

这只是一个示例,因此它不应处理所有类似server关闭,client被卡住等情况。它应该简洁明了。

最佳答案

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的角色也是异步的。他们只是阻塞线程,等待新消息。

关于scala - 具有Scala actor的客户端-服务器示例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6317142/

10-14 12:37
查看更多