我正在尝试使用Play框架2.6在Java中构建REST API,该API将以块的形式向客户端发送响应。为此,我按照Play HTTP响应流的documentation遵循分块响应构建器示例。
在该示例中(也在下面复制),在发送块之后,它关闭了源。经过一些处理后,如何保持源打开并使用sourceActor继续发送更多消息?此处理可能在其他有权访问sourceActor的actor中进行。
error
答案 0 :(得分:0)
使用BroadcastHub
:
Pair<ActorRef, Source<ByteString, NotUsed>> source =
Source.<ByteString>actorRef(256, OverflowStrategy.dropNew())
.toMat(BroadcastHub.of(ByteString.class), Keep.both())
.run(materializer);
ActorRef sourceActor = source.first();
Source<ByteString, NotUsed> matSource = source.second();
发送到实例化角色的消息会向下游发出,您可以使用实例化源来完成该方法(请注意,这种方法没有背压):
sourceActor.tell(ByteString.fromString("kiki"), ActorRef.noSender());
// send more messages to sourceActor...
return ok().chunked(matSource);
您可能需要使用keepAlive
将消息注入流中以使其保持打开状态。