如何将 keep-alive 注入 akka-http 中的 websocket 处理程序?
how can I inject a keep-alive into a websocket handler in akka-http?
我已经编写了一些代码来使用 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。我应该如何重组才能注入 keep-alive?
我已经编写了一些代码来使用 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。我应该如何重组才能注入 keep-alive?