当未过滤的 Netty 服务器实际关闭时如何得到通知?
How to get notified when unfiltered Netty server actually gets shutdown?
我有一个未过滤的 Netty 服务器,我需要在每次测试后关闭并重新启动它。
val mockService = unfiltered.netty.Server.http(mockServicePort).handler(mockServicePlan)
before {
proxyServer.start()
}
after {
proxyServer.stop()
}
目前,这不起作用,我相当确定这是因为 stop()
函数是非阻塞的,所以下面的 start()
函数被提前调用。
我在寻找一种方法来阻止或在服务器关闭时收到通知,但它似乎不会通过当前的 API 浮出水面。
是否有更好的方法来实现我想要达到的目标?
简单的回答:用 HTTP4S Blaze 服务器替换你的未过滤的 Netty 服务器。
var server: org.http4s.server.Server = null
val go: Task[Server] = org.http4s.server.blaze.BlazeBuilder
.bindHttp(mockServicePort)
.mountService(mockService)
.start
before {
server = go.run
}
after {
server.shutdown.run
}
还有一个 awaitShutdown
会阻塞,直到服务器关闭。但由于 shutdown
是 Task
,因此很容易在完成时收到通知。只是 flatMap
那个狗屎。
我有一个未过滤的 Netty 服务器,我需要在每次测试后关闭并重新启动它。
val mockService = unfiltered.netty.Server.http(mockServicePort).handler(mockServicePlan)
before {
proxyServer.start()
}
after {
proxyServer.stop()
}
目前,这不起作用,我相当确定这是因为 stop()
函数是非阻塞的,所以下面的 start()
函数被提前调用。
我在寻找一种方法来阻止或在服务器关闭时收到通知,但它似乎不会通过当前的 API 浮出水面。
是否有更好的方法来实现我想要达到的目标?
简单的回答:用 HTTP4S Blaze 服务器替换你的未过滤的 Netty 服务器。
var server: org.http4s.server.Server = null
val go: Task[Server] = org.http4s.server.blaze.BlazeBuilder
.bindHttp(mockServicePort)
.mountService(mockService)
.start
before {
server = go.run
}
after {
server.shutdown.run
}
还有一个 awaitShutdown
会阻塞,直到服务器关闭。但由于 shutdown
是 Task
,因此很容易在完成时收到通知。只是 flatMap
那个狗屎。