Scala Akka http检测客户端连接关闭

Scala Akka http检测客户端连接关闭,scala,akka,akka-stream,akka-http,Scala,Akka,Akka Stream,Akka Http,我有个问题 我有Akka HTTP服务器,并使用Akka HTTP客户端。客户端基本上使用Http.singleRequest()进行大量外部调用。这需要很多时间,有时用户会关闭与我的服务器的连接 所以问题是-我怎样才能检测到用户已经关闭了连接 server.scala: val requestHandler: HttpRequest => HttpResponse = { case HttpRequest(HttpMethods.GET, Uri.Path("/"), _,

我有个问题

我有Akka HTTP服务器,并使用Akka HTTP客户端。客户端基本上使用Http.singleRequest()进行大量外部调用。这需要很多时间,有时用户会关闭与我的服务器的连接

所以问题是-我怎样才能检测到用户已经关闭了连接

server.scala:

val requestHandler: HttpRequest => HttpResponse = {
      case HttpRequest(HttpMethods.GET, Uri.Path("/"), _, _, _) =>
        Thread.sleep(5000)
        println("reply")
        HttpResponse(entity = HttpEntity(
          ContentTypes.`text/html(UTF-8)`,
          "Ok"))
    }    

val serverBinding: Future[Http.ServerBinding] = Http().bind(host, port)
      .via(reactToTopLevelFailures)
      .to(Sink.foreach { connection: IncomingConnection =>
        println("Accepted new connection from " + connection.remoteAddress)
        connection.handleWith(Flow[HttpRequest] map requestHandler)
      })
      .run()
您只需通过cURL执行请求并立即取消它,您仍将在控制台中看到“reply”


感谢

TCP连接和HTTP请求提供了不同抽象级别的关注点。通常http处理程序不应该关心连接的状态。如果是这样的话,可能应该重新考虑设计。你在解决什么问题?@simpadjo实际上在用户断开连接(重新加载/刷新页面等)时停止使用killswitch处理源代码。我正在使用Akka流进行大量计算,当我不再需要结果时,我想停止这样做。Websockets可能是一个解决方案。这是真的,但我不能使用Websockets(我正在考虑创建distributed actor系统(因为我有3个工作人员在运行相同的代码),并检测是否收到相同的请求。在这种情况下,可以终止正在运行的流。