播放框架/ Akka流:检测WebSocket关闭的时间

时间:2019-01-10 21:20:47

标签: scala playframework akka akka-stream

当直接使用Akka Streams处理WebSocket时,我没有找到正确的方法来知道客户端何时断开连接(正常情况下还是由于崩溃或超时)。我正在使用一个基本示例,例如官方文档中的示例:

import play.api.mvc._
import akka.stream.scaladsl._

def socket = WebSocket.accept[String, String] { request =>

  // Log events to the console
  val in = Sink.foreach[String](println)

  // Send a single 'Hello!' message and then leave the socket open
  val out = Source.single("Hello!").concat(Source.maybe)

  Flow.fromSinkAndSource(in, out)
}

我需要知道客户端何时不再连接。

1 个答案:

答案 0 :(得分:1)

使用watchTermination

def socket = WebSocket.accept[String, String] { request =>
  val in = Sink.foreach[String](println)
  val out = Source.single("Hello!").concat(Source.maybe)

  Flow.fromSinkAndSource(in, out)
    .watchTermination() { (_, fut) =>
      fut onComplete {
        case Success(_) =>
          println("Client disconnected")
        case Failure(t) =>
          println(s"Disconnection failure: ${t.getMessage}")
      }
    }
}