2016-05-23 6 views
5

Ichwie kann ich zählen Akka aktuelle offene Verbindungen

"com.typesafe.akka" %% "akka-actor" % "2.4.6", 
    "com.typesafe.akka" % "akka-http-experimental_2.11" % "2.4.6" 

Ich teste den einfachen Code in Akka http suchen, wie unten. Meine Hauptfrage ist, wie ist es möglich, es zu verbessern, um auch Benachrichtigung für geschlossene Verbindung zu erhalten, So kann ich die Anzahl der derzeit geöffneten Verbindungen drucken?

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

Antwort

0

So etwas wie dies funktionieren könnte:

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

Siehe watchTermination

Verwandte Themen