我已经编写了一些代码,使用akka-http 10.0.9通过websockets与浏览器进行通信。它工作得很好,除了连接超时。虽然我们会向客户端发送持续的数据流,但客户端不会长时间请求任何数据。
我知道解决方案是将keep-alive消息注入到传入的websocket源中,如下所示:
val s = Source(List(data....)).keepAlive(15.seconds, () => Strict.TextMessage("heart beat"))
但是,akka-http api要求流来处理连接:
path("query") {
parameter('session, 'package) {
(session,packageId) =>
val sg = getGraphManager(session)
sg match {
case Left(error) => complete(StatusCodes.BadRequest -> TSError(msg=error))
case Right(gm) =>
val tsFlow = new TSFlow(ksource, session)
handleWebSocketMessages(Flow.fromGraph(tsFlow.flowGraph))
}
}
}
因此,我从未看到过来源,因此没有机会注入keep-alive。我应该如何重组事物,以便注入一个保持活力?