我目前正在使用播放框架(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())