微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

scala – 使用Akka Http进行多重绑定

鉴于 documentation,使用akka http绑定到端口然后路由传入连接很容易.

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

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

val route2 : Flow[HttpRequest,_] = ???
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().bindAndHandle(route1,port1)
Http().bindAndHandle(route2,port2)

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

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

解决方法

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐