Play framework / Akka Streams: Обнаружение закрытия WebSocket - PullRequest
0 голосов
/ 11 января 2019

При работе с WebSockets напрямую через Akka Streams я не нашел правильного способа узнать, когда клиент отключается (обычно, из-за сбоя или тайм-аута). Я использую базовый пример, подобный приведенному в официальной документации:

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 голосов
/ 11 января 2019

Использование 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}")
      }
    }
}
...