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

时间:2016-05-23 15:03:58

标签: 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"

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

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")
}

1 个答案:

答案 0 :(得分:0)

这样的事可能有用:

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()

请参阅watchTermination