我目前正在使用播放框架(2.0.1版)。 我的应用程序需要收听udp广播消息。所以我需要一个新线程来监视套接字并接收所需的字节。 看过Play框架后,似乎Akka系统被用来处理线程/作业。 所以我实现了一个新的背景akka任务,它读取我的套接字。见下文。一切工作如何我的预期,我能够在后台任务中接收我想要的数据。 我的问题是当我关闭服务器。在开发中按控制D.它说消息“[信息]播放 - 关机应用程序默认Akka系统。”但后来挂起,从不关闭我的后台线程。如何停止关闭AKK线程
public running = false;
public void onReceive(Object message) {
if (message instanceof SystemConfiguration) {
try {
InetAddress group = InetAddress.getByName("222.1.1.1");
MulticastSocket socket = new MulticastSocket(54321);
socket.joinGroup(group);
running = true;
while (running) {
Logger.info("MultiCastController - waiting to receive message");
byte[] buf = new byte[1000];
DatagramPacket recv = new DatagramPacket(buf, buf.length);
socket.setSoTimeout(30000);
try {
socket.receive(recv);
String msgString = new String(recv.getData()).trim();
Logger.info("retreived: " + msgString);
} catch (SocketTimeoutException e) {
Logger.info("MultiCastController - timed out"
+ recv.getData().toString());
}
}
} catch (Exception ex) {
Logger.info("Errror message caught: " + ex.toString());
}
} else {
Logger.info("Error starting multicast receiver incorrect value passed: ");
}
}
我试过重写post stop,但它似乎永远不会被调用。我也试过akka.system()。isTerminated()但它没有工作。
@Override
public void postStop()
{
Logger.info("MultiCastController - postStop() - stopping thread");
running = false;
}
我一直在寻找的其他可能的选择是否有任何方法来获得阿卡状态?它正在关闭,所以我可以做类似
while(运行& & akka.system()。alive())。我发现如果我收到一条消息,它会崩溃,因为ebean服务器已关闭。我甚至可以做一次黑客攻击并检查它是否还活着?
而(运行& & ebean.server.isalive())