akka-http - akka http:服务器绑定未按预期运行
问题描述
我有以下代码:
val serverSource = Http().bind("localhost", 8080)
val connectionSink = Sink.foreach[IncomingConnection] {
connection => println(s"Accepted incoming connection from ${connection.remoteAddress}")
}
val serverBindingFuture = serverSource.to(connectionSink).run()
serverBindingFuture.onComplete {
case Success(binding) => {
println("Server binding successful")
binding.terminate(10 seconds)
}
case Failure(ex) => println(s"Server binding failed $ex")
}
正如代码段所说,我将在 10 秒后终止服务器绑定。所以我希望如果我在此期限到期之前发送请求,我应该得到消息“接受来自...的传入连接”。
但我观察到我总是收到“无法访问此站点”,并且从未打印过消息。
解决方案
正如代码段所说,我将在 10 秒后终止服务器绑定。所以我希望如果我在此期限到期之前发送请求,我应该得到消息“接受来自...的传入连接”。
你误解了terminate
. 持续时间参数是关闭的硬期限,而不是表示服务器将在此之前继续接受请求。
这是对您的代码的调整以证明这一点。
- 服务器启动后立即打印
Server binding successful
,并在调用前等待 10 秒terminate
Starting shutdown
在调用之前打印并在完成后立即terminate
打印Finished shutdown
terminate
你应该看到:
curl 'http://localhost:8080/api
触发println
直到Starting shutdown
出现Starting shutdown
和之间的延迟Finished shutdown
可能很短(比 10 秒短得多)
val serverSource = Http().bind("localhost", 8080)
val connectionSink = Sink.foreach[IncomingConnection] {
connection => println(s"Accepted incoming connection from ${connection.remoteAddress}")
}
val serverBindingFuture = serverSource.to(connectionSink).run()
serverBindingFuture.onComplete {
case Success(binding) => {
println("Server binding successful")
system.scheduler.scheduleOnce(10 seconds) {
println("Starting shutdown")
binding.terminate(10 seconds).onComplete { termOutcome =>
println(s"Finished shutdown $termOutcome")
}
}
}
case Failure(ex) => println(s"Server binding failed $ex")
}
推荐阅读
- google-apps-script - 如何根据值自动将 Google 表格中的列值转换为超链接?
- python - 如何检查已安装包的完整性?
- android-studio - 无法确定任务 ':app:compileGLOBALDebugJavaWithJavac' 的依赖关系
- sql - 如何检查表 B 是否与表 A 中存在的项目数量匹配?SQL 服务器
- powershell - POWERSHELL 任务计划程序在 -Argument 内部传递变量
- azure - 在 Azure 应用服务中托管 HashiCorp Vault
- dynamics-crm - 将 Xrm.openForm 与 Dynamics 365 流程结合使用
- cron - AgendaJS - 在星期一和星期三每隔一周使用 repeatEvery 执行一项任务
- bash - grep 列中的子字符串并打印该列中包含该子字符串的行
- mysql - 如果验证了最新记录,如何显示“无效”记录?