scala - how can I inject a keep-alive into a websocket handler in akka-http? -
i've written code communicate browser on websockets using akka-http 10.0.9. works nicely, except connection times out. although we're sending constant stream of data client, client isn't requesting long periods of time.
i know solution inject keep-alive messages incoming websocket source, this:
val s = source(list(data....)).keepalive(15.seconds, () => strict.textmessage("heart beat"))
however, akka-http api calls flow handle connection:
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)) } } }
consequently, never see incoming source, there's no opportunity inject keep-alive. how should restructure things can inject keep-alive?
the way control how connections dropped server-side change idle-timeout
(see docs here , here).
you can set
idle-timeout = infinite
to disable timeout.
if want use keep alive messages, need sent client side. .keepalive
combinator easiest way them if client based on akka streams.
Comments
Post a Comment