Dans Scala, il est très facile de se connecter à un acteur distant, mais la documentation ne me dit rien sur la déconnexion. Le simple fait de jeter la référence ne fonctionne pas, car les acteurs distants sont des acteurs, donc ceux-ci ne seront pas collectés avant d'être stoppés. Alors, comment me déconnecter?Comment déconnecter un Scala Remote Actor?
Cela ne Terminate après la sortie:
import actors.{DaemonActor,remote}
import remote.{RemoteActor,Node}
object SimpleClient{
val messageHandler = new DaemonActor{
def act{
loop{
react{
case message:String =>
println("got message: " + message)
case _ =>
}
}
}
start
}
def main(args:Array[String]){
val server = RemoteActor.select(Node("localhost",9999),'server)
server.send('Connect,messageHandler)
var exit = false
while(!exit){
val message = Console.readLine
if(message == "exit" || message == "quit") {
exit = true
server ! 'Disconnect
}
else
server ! message
}
}
}
Ce serveur:
import actors.{Actor,OutputChannel}
import actors.remote.RemoteActor
object Server extends Actor{
val clients = new collection.mutable.HashSet[OutputChannel[Any]]
def act{
loop{
react{
case 'Connect =>
clients += sender
case 'Disconnect =>
clients -= sender
case message:String =>
for(client <- clients)
client ! message
}
}
}
def main(args:Array[String]){
start
RemoteActor.alive(9999)
RemoteActor.register('server,this)
}
}
cool qui fonctionne, merci. J'ai vu que vous aviez déplacé le serveur à l'intérieur du gestionnaire de messages, mais pourquoi cela se comporte-t-il différemment de l'enregistrement du serveur dans le bloc de la boucle principale? – Arne