(下部にある更新/修正)PlayFramework 2.xを使用して、アクタを使用して簡単なWebSocketアプリケーションを作成しています。私は物事を働かせることができる(エコーpingを送信する)が、私は何も送受信されない場合、WebSocketが短い時間(約30秒)後になぜ切断するのだろうか?私は、Websocketを使用して終了時に通知を返すために、長時間(5〜20分)プロセスを実行しています。私のAkka WebSocketアクターが切断/死にかけているのはなぜですか?
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!");
}
}
UPDATE:ありがとう@chunjef。私は実際にアイドルタイムアウトを設定する必要がありましたが、いくつかのapplication.config値がdevモードでは使用されないため、プロダクションモードで起動しなければなりませんでした。なぜ彼らはそれをこのように設定しましたか、私は分かりませんし、非常にイライラしています。注:devモードでは、runコマンドを使用すると、 application.confの設定がサーバによって選択されません。 devモードでは、アプリケーションクラスパス が使用可能になる前にサーバーが起動するため、これは です。代わりに を使用する必要があるいくつかの他のオプションがあります。