我目前使用的播放框架(2.0.1版)。 我的应用程序需要听UDP广播消息。 所以,我需要一个新的线程来监视插座并接收所需的字节数。 展望发挥框架后,它似乎阿卡系统是用来处理线程/职位。 所以,我实现了一个新的背景阿卡的任务,读取我的插座。 见下文。 一切工作我没有料到,我能够接受我想在后台任务中的数据。 我的问题是,当我关闭服务器。 在开发按下Control D.它说消息“[信息]玩 - 关闭应用程序的默认阿卡系统” 但随后挂永不关闭我的后台线程。
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: ");
}
}
我试图重写后停止,但它似乎永远不会被调用。 我也曾尝试akka.system()。isTerminated(),但它没有工作。
@Override
public void postStop()
{
Logger.info("MultiCastController - postStop() - stopping thread");
running = false;
}
另一个可能的选项我一直在寻找有没有什么办法让阿卡状态? 它被关闭,所以我可以做这样的事情
而(运行&& akka.system()。活着())。 我发现,如果我不接受它崩溃,因为ebean服务器已关闭的消息。 我甚至可以做黑客,检查是否还活着,不知何故?
而(运行&& ebean.server.isalive())