0

我需要同时启动两个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(),但我有两个Awaitables。

def all(awaitables: Awaitable[_]*): Unit

完成所有操作后返回。

我正在使用 Scala 2.12 和 Twitter 20.3.0。

4

0 回答 0