代码之家  ›  专栏  ›  技术社区  ›  Ramón J Romero y Vigil

使用Akka Http进行多重绑定

  •  6
  • Ramón J Romero y Vigil  · 技术社区  · 8 年前

    考虑到 documentation .

    一个没有解决的问题是如何为不同的路由绑定多个端口。如果我有多个规格:

    val route1 : Flow[HttpRequest, HttpResponse,_] = ???
    val interface1 : String = ???
    val port1 : Int = ???
    
    val route2 : Flow[HttpRequest, HttpResponse,_] = ???
    val interface2 : String = ???
    val port2 : Int = ???
    

    这些应该用一个绑定吗 HttpExt ?

    implicit val actorSystem : akka.actor.ActorSystem = ???
    
    val httpExt = akka.http.scaladsl.Http()
    
    httpExt.bindAndHandle(route1, interface1, port1)
    httpExt.bindAndHandle(route2, interface2, port2)
    

    或者,应该是不同的 HttpExt(HTTP扩展名) 用于每个绑定?

    Http().bindAndHandle(route1, interface1, port1)
    Http().bindAndHandle(route2, interface2, port2)
    

    如果两者都有效,那么使用一种方法而不是另一种方法会有什么影响吗?

    1 回复  |  直到 8 年前
        1
  •  7
  •   Tim    8 年前

    下面是一个小的源代码调查。

    Here 我们看看发生了什么 Http() 呼叫 Http 对象延伸 ExtensionId[HttpExt] trait,负责向actor系统注册附加功能。 This 是那个吗 super 呼叫正如我们所见,它使用 this Here 是我们打电话时实际发生的事情 Http() 。此代码所做的第一件事是检查扩展是否已注册。记住 ext 在我们的例子中是一个对象,所以在第一个对象之后的任何后续调用都不会做任何事情。

    这意味着您的两种方法都可以工作相同,但imo使用一种方法 httpExt 考虑到底层系统的实际工作方式,就不那么令人困惑了。