![]() | ![]() | ![]() | Remote Actors | Contents | Index |
This section describes the remote actors API. Its main interface is
the
RemoteActor
object in package scala.actors.remote. This object provides
methods to create and connect to remote actor instances. In the code
snippets shown below we assume that all members of RemoteActor
have been imported; the full list of imports that we use is as
follows:
import scala.actors._ import scala.actors.Actor._ import scala.actors.remote._ import scala.actors.remote.RemoteActor._
A remote actor is uniquely identified by a
Symbol. This
symbol is unique to the JVM instance on which the remote actor is
executed. A remote actor identified with name 'myActor can be
created as follows.
class MyActor extends Actor {
def act() {
alive(9000)
register('myActor, self)
// ...
}
}
Note that a name can only be registered with a single (alive) actor at
a time. For example, to register an actor A as 'myActor, and
then register another actor B as 'myActor, one would first
have to wait until A terminated. This requirement applies across all
ports, so simply registering B on a different port as A is not
sufficient.
Connecting to a remote actor is just as simple. To obtain a remote
reference to a remote actor running on machine myMachine, on
port 8000, with name 'anActor, use select in the
following manner:
val myRemoteActor = select(Node("myMachine", 8000), 'anActor)
The actor returned from select has type AbstractActor
which provides essentially the same interface as a regular actor, and
thus supports the usual message send operations:
myRemoteActor ! "Hello!"
receive {
case response => println("Response: " + response)
}
myRemoteActor !? "What is the meaning of life?" match {
case 42 => println("Success")
case oops => println("Failed: " + oops)
}
val future = myRemoteActor !! "What is the last digit of PI?"
Note that select is lazy; it does not actually initiate any
network connections. It simply creates a new AbstractActor
instance which is ready to initiate a new network connection when
needed (for instance, when ! is invoked).
![]() | ![]() | ![]() | Remote Actors | Contents | Index |