我需要同时启动两个Finagle ListeningServer因为我必须实现两个不同的扩展特性ListeningServer
。
/* A simplified example to give you an idea of what I'm trying to do */
trait FirstListeningServer extends ListeningServer {
def buildFirstServer() = ???
def main(): Unit = {
val server = buildFirstServer()
closeOnExit(server)
Await.ready(server)
}
}
trait SecondListeningServer extends ListeningServer {
def buildSecondServer() = ???
def main(): Unit = {
val server = buildSecondServer()
closeOnExit(server)
Await.ready(server)
}
}
基本上,每个ListeningServer
都是一个com.twitter.util.Awaitable
,每当我必须实例化一个新的时,ListeningServer
我都会使用Await.ready(myListeningServer)
.
class MyServer extends FirstListeningServer with SecondListeningServer {
override def main(): Unit = {
val firstServer = buildFirstServer()
closeOnExit(firstServer)
val secondServer = buildSecondServer()
closeOnExit(secondServer)
Await.all(firstServer, secondServer)
}
}
现在我不确定 using是否是同时启动多个 sAwait.all()
的正确选择。ListeningServer
我会使用com.twitter.util.Future.collect()
,但我有两个Awaitable
s。
def all(awaitables: Awaitable[_]*): Unit
完成所有操作后返回。
我正在使用 Scala 2.12 和 Twitter 20.3.0。