使用Akka Http进行多重绑定

Ram*_*gil 5 scala akka akka-stream akka-http

使用HTTP阿卡绑定到一个端口,然后将传入的连接是很容易的给出的文档.

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

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

val route2 : Flow[HttpRequest, HttpResponse,_] = ???
val interface2 : String = ???
val port2 : Int = ???
Run Code Online (Sandbox Code Playgroud)

这些应该绑一个HttpExt吗?

implicit val actorSystem : akka.actor.ActorSystem = ???

val httpExt = akka.http.scaladsl.Http()

httpExt.bindAndHandle(route1, interface1, port1)
httpExt.bindAndHandle(route2, interface2, port2)
Run Code Online (Sandbox Code Playgroud)

或者,HttpExt每个绑定是否应该使用不同的?

Http().bindAndHandle(route1, interface1, port1)
Http().bindAndHandle(route2, interface2, port2)
Run Code Online (Sandbox Code Playgroud)

如果其中一个有效,那么使用一种方法对另一种方法有什么影响吗?

提前感谢您的审核和回复.

Tim*_*Tim 5

一点源代码调查显示以下内容.

在这里,我们看到Http()电话会发生什么.Httpobject extends ExtensionId[HttpExt]trait,负责向actor系统注册其他功能. 是那个super电话.我们可以看到它使用this引用,在我们的例子中是一个对象引用(重要). 是我们打电话时实际发生的事情Http().这段代码的第一件事就是检查扩展是否已经注册.请记住,ext在我们的例子中是一个对象,所以在第一个之后的任何后续调用都不会做任何事情.

这意味着你的任何一种方法都可以使用相同的方法,但是httpExt考虑到底层系统是如何工作的,imo使用它的方法就不那么容易了.