Client-Server example with Scala actors

自作多情 提交于 2019-12-22 05:16:33

问题


What is the best way to implement the following example ?

  • Actor server receives Requests, handles them, creates a new Response for each Request and sends the Response back to the Request sender.

  • Actor client sends Requests and receives Responses.

All this communication is asynchronous and hence it uses react.

This is just an example and so it should not handle all those cases like server is down, client is stuck, etc. It should be just concise and expressive.


回答1:


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

Usage:

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

With regards to:

All this communication is asynchronous and hence it uses react.

Actors that use receive are also asynchronous. They just block the thread, waiting for a new messages.



来源:https://stackoverflow.com/questions/6317142/client-server-example-with-scala-actors

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!