1

我有一个未经过滤的 Netty 服务器,每次测试后我都需要关闭并重新启动它。

val mockService = unfiltered.netty.Server.http(mockServicePort).handler(mockServicePlan)

before {
  proxyServer.start()
}

after {
  proxyServer.stop()
}

目前,这不起作用,我相当确定这是因为该stop()函数是非阻塞的,因此以下start()函数被提前调用。

我寻找了一种方法来阻止或在服务器关闭时获得通知,但它似乎不会通过当前的 API 浮出水面。

有没有更好的方法来实现我想要实现的目标?

4

1 回答 1

1

简单的答案:用 HTTP4S Blaze 服务器替换您的 Unfiltered 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是 a Task,所以很容易在完成时收到通知。就是flatMap那个狗屎。

于 2015-06-17T13:04:41.223 回答