所以我开始学习 Scala 和 Akka actor,Akka-Http。我尝试使用 Akka Http 实现一个简单的点击计数器,它计算本地主机页面上的每次点击。我使用 wrk 工具运行 10 个线程和 100 个连接,之后计数和总请求数不匹配(见 wrk)。
这是我的代码:
object WebServer3 {
var number: Int = 0
final case class Inc()
class ActorClass extends Actor with ActorLogging {
def receive = {
case Inc => number = number + 1
}
}
def main(args: Array[String]) {
implicit val system = ActorSystem("my-system")
implicit val materializer = ActorMaterializer()
implicit val executionContext = system.dispatcher
val actor1 = system.actorOf(Props[ActorClass], "SimpleActor")
val route =
path("Counter") {
get {
actor1 ! Inc
complete(HttpEntity(ContentTypes.`text/html(UTF-8)`, s"<h1>You visited $number times</h1>"))
}
}
val bindingFuture = Http().bindAndHandle(route, "localhost", 8080)
println(s"Server online at http://localhost:8080/\nPress RETURN to stop...")
StdIn.readLine() // let it run until user presses return
bindingFuture
.flatMap(_.unbind()) // trigger unbinding from the port
.onComplete(_ => system.terminate()) // and shutdown when done
}
}
请原谅我不成熟/业余的编码技能。我还在学习,我知道这与并发有关。但我还找不到解决方案。请帮忙。
编辑#1:我也尝试过 AtomicInteger。那没有帮助。编辑#2:我也尝试了完整的 akka-http 方式,询问和等待。这也无济于事。