(更新/修復在底部)我正在使用PlayFramework 2.x來創建一個使用actor的簡單WebSocket應用程序。我能夠使事情工作(發送回顯ping),但我只是想知道爲什麼WebSocket在短時間(大約30秒)後斷開連接,如果沒有發送或接收任何內容?我有一個長時間運行(5-20分鐘)的過程,我需要使用websocket在通知結束時發送回去。爲什麼我的Akka WebSocket Actor斷線/死機?
我放了一個postStop,看看演員是否停下來,確實被擊中。也許我只是不明白演員的生命週期?由於沒有父母演員,我無法在文件中找到爲什麼演員會在此案中被殺害的任何內容。
控制器:
public WebSocket socket() {
return WebSocket.Text.accept(request ->
ActorFlow.actorRef(
WebSocketActor::props,
actorSystem, materializer
)
);
}
演員
public class WebSocketActor extends AbstractActor {
public static Props props(ActorRef out) {
return Props.create(WebSocketActor.class, out);
}
private final ActorRef out;
public WebSocketActor(ActorRef out) {
this.out = out;
ActorSystem actorSystem = context().system();
}
@Override
public Receive createReceive() {
return receiveBuilder()
.match(String.class, message ->
out.tell("Message: " + message, self())
)
}
public void postStop() {
System.out.println("I'm dying over here!");
}
}
更新:謝謝@chunjef。實際上,我確實必須設置空閒超時,但也必須以生產模式啓動,因爲某些application.config值不在dev模式下使用。爲什麼他們這樣設置我不知道,而且很令人沮喪。根據官方文檔:
注意:在dev模式下,當您使用run命令時,服務器將不會拾取您的 application.conf設置。這是 ,因爲在開發模式下,服務器在應用程序類路徑 可用之前啓動。您還需要使用其他幾個選項來代替 。