我正在写一个简单的聊天服务器,我想保持它尽可能简单。下面列出的我的服务器只接收连接并将它们存储在客户端集中。然后将传入消息广播到该服务器上的所有客户端。服务器可以正常工作,但在客户端,RemoteActor会阻止我的程序终止。有没有办法在不终止服务器上的参与者的情况下删除我客户端上的参与者?
我还不想用“每个客户一个演员”的模式。
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)
}
}
我的当事人会变成这样
val server = RemoteActor.select(Node("localhost",9999),'server)
server.send('Connect,messageHandler) //answers will be redirected to the messageHandler
/*do something until quit*/
server ! 'Disconnect