2017-08-14 22 views
0

我已經寫了一些代碼來使用akka-http 10.0.9通過websockets與瀏覽器進行通信。它很好地工作,除了連接超時。儘管我們正在向客戶端發送持續不斷的數據流,但客戶端並沒有長時間請求任何數據。如何在akka-http中的websocket處理程序中注入keep-alive?

我知道解決的辦法就是注射保活消息到輸入的WebSocket源,如:

val s = Source(List(data....)).keepAlive(15.seconds,() => Strict.TextMessage("heart beat")) 

然而,對於流動阿卡-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)) 

      } 
     } 
} 

因此,我從來沒有看到傳入源,因此沒有機會注入保持活動狀態。我應該如何調整結構以便注入保持活力?

回答

1

控制服務器端如何斷開連接的唯一方法是更改​​idle-timeout(請參閱文檔herehere)。

您可以設置

idle-timeout = infinite 

完全禁用超時。

如果要使用保持活動的消息,它們需要從客戶端發送。如果您的客戶端基於Akka Streams,那麼.keepAlive組合子是獲取它們的最簡單方法。

相關問題