问题
What is the best way to implement the following example ?
Actor
server
receivesRequests
, handles them, creates a newResponse
for eachRequest
and sends theResponse
back to theRequest
sender.Actor
client
sendsRequests
and receivesResponses
.
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