我正在研究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")
}
答案 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()