我如何计算akka当前的开放连接数

Jul*_*ias 6 scala akka akka-http

我正在研究akka http

  "com.typesafe.akka" %% "akka-actor" % "2.4.6",
  "com.typesafe.akka" % "akka-http-experimental_2.11" % "2.4.6"
Run Code Online (Sandbox Code Playgroud)

我正在测试简单的代码,如下所示.我的主要问题是如何增强它以获得关闭连接的通知,那么我可以打印当前打开的连接数?

object StatsRepo{
 val totConn = new AtomicInteger(0)
 val currOpenConn = new AtomicInteger(0) // how to count this?
}

object Boot2 extends App{
   implicit val system = ActorSystem("akka-http")
   implicit val materializer = ActorMaterializer()
   implicit val executionContext = system.dispatcher

   val requestHandler: HttpRequest => Future[HttpResponse] = {
       // do some work here...
   }
   val serverSource = Http().bind("0.0.0.0", 8080)


  val bindingFuture: Future[Http.ServerBinding] =
    serverSource.to(Sink.foreach { connection =>
      StatsRepo.totConn.incrementAndGet()
     connection handleWithAsyncHandler requestHandler
   }).run()
 println(s"Server online at http://0.0.0.0:9090")
}
Run Code Online (Sandbox Code Playgroud)

Ric*_*ich 1

像这样的事情可能会起作用:

val bindingFuture: Future[Http.ServerBinding] =
  serverSource.to(Sink.foreach { connection =>
    StatsRepo.totConn.incrementAndGet()
    connection.handleWith(
      Flow[HttpRequest].mapAsync(1)(requestHandler)
        .watchTermination()((_, connClosedFuture) => {
          connClosedFuture.onComplete(_ => currOpenConn.decrementAndGet())
        }))
  }).run()
Run Code Online (Sandbox Code Playgroud)

参见watchTermination