ストリーム使用して応答をチャンクを取得することはできません、私はいくつかの遅延イベントを発行修正版を作成しましたので、私は、クライアント側で同じ割合で発生して、それらを観察することができた:が正しくアッカは<a href="https://www.playframework.com/documentation/2.5.x/JavaStream#Chunked-responses" rel="nofollow noreferrer">Play! Framework documentation</a>で提供例を使用して
public Result playExampleDelayed() {
Source<ByteString, ?> source = Source.<ByteString> actorRef(5, OverflowStrategy.dropNew())
.mapMaterializedValue(sourceActor -> {
for (int i = 0; i < 10; ++i) {
Thread.sleep(1000);
sourceActor.tell(ByteString.fromString("tick " + i), null);
}
sourceActor.tell(new Status.Success(NotUsed.getInstance()), null);
return null;
});
return ok().chunked(source);
}
ただし、curl
を使用すると、ソースが完了するとすべてのイベントが1つのステップで取得されます。私が意図した動作を得ることができます別のソースの種類を使用して
:この場合
public Result tick() {
Source<ByteString, ?> source = Source.<ByteString> tick(Duration.create(0, TimeUnit.SECONDS),
Duration.create(1, TimeUnit.SECONDS), ByteString.fromString("tick"));
return ok().chunked(source);
}
は、私が毎秒コンソール1つのチャンクで取得します。
Akkaのドキュメントによると、最初の例がうまくいくと思います。私は間違って何をしていますか?
'Thread.sleep'はちょうど"重い作業 "のシミュレーションでした。 CompletableFutureで 'for'サイクルを囲んで、このトリックを作った。どうもありがとう! –
それは通常それが使用されている正しいです。私は言い換えて言います:) ボトムライン:Akkaを使用すると、常にブロックから遠ざかります。 –