当未过滤的 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 会阻塞,直到服务器关闭。但由于 shutdownTask,因此很容易在完成时收到通知。只是 flatMap 那个狗屎。