(更新/修复在底部)我正在使用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设置。这是 ,因为在开发模式下,服务器在应用程序类路径 可用之前启动。您还需要使用其他几个选项来代替 。