加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 18:17:35 所属栏目:安全 来源:网络整理
导读:鉴于 documentation,使用akka http绑定到端口然后路由传入连接很容易. 未解决的一个问题是如何为不同的路由绑定多个端口.如果我有多个规格: val route1 : Flow[HttpRequest,HttpResponse,_] = ???val interface1 : String = ???val port1 : Int = ???val ro
鉴于 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就不那么容易混淆了.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读