0

我有一个使用 Java API 编写的客户端服务器程序。正在尝试向服务器发送消息,然后服务器将向客户端发送一些回复消息。然后客户端向服务器发送毒药。如果服务器收到毒丸消息,它必须关闭。下面的代码片段相同。在 ClientActor 中:

remoteActor.tell(poisonPill());

在 ServerActor 中:

public void onReceive(Object message) throws Exception {        
  if (message instanceof String) {          
    getSender().tell(message + " got something");       
  } else if (message instanceof PoisonPill) {           
    getContext().system().shutdown();       
  } 
}

但是该message instanceof PoisonPill行没有执行,因此服务器始终在运行。

谁可以帮我这个事?为什么这条线根本没有执行?

4

2 回答 2

3

PoisonPill 由 Akka 自动处理。您不应该从 Actor 内部终止 ActorSystem。它相当于在业务对象中调用 System.exit(0)。如果要停止 ServerActor,请执行以下操作: context.stop(self)

于 2012-06-19T19:18:48.013 回答
1

难道不应该

remoteActor.tell(new PoisonPill());
于 2012-06-19T12:26:41.400 回答