【问题标题】:Creating multiple HTTP servers on the same host/port在同一主机/端口上创建多个 HTTP 服务器
【发布时间】:2019-02-03 14:53:18
【问题描述】:

我想在我的网络服务器上运行 多个非集群的 verticles。每个 verticle 都由一个单独的进程/命令行启动,并为 同一主机同一端口 创建自己的 HTTP 服务器 (vertx.createHttpServer)拥有独特的路线。但是,这似乎不起作用,因为在启动一个 Verticle 后,所有其他 Verticle 都会抛出 BindException "Address already in use"。

作为一个 Vert.x 新手,我只能想到两种方法来通过这个:

  1. 以编程方式从单个进程部署所有 Verticle,以及 让所有的verticles使用一个全局路由器实例来添加他们的 具体路线。
  2. 对顶点进行聚类并创建一个额外的顶点 它提供了一个网络服务器,允许设置路由和处理 通过集群事件总线请求和响应。

这两种方法都会迫使我重写我的大部分 Verticle。

还有其他方法可以规避这个多服务器问题吗?

【问题讨论】:

    标签: vert.x httpserver vertx-verticle


    【解决方案1】:

    每个verticle都由一个单独的进程/命令行启动并创建 他自己的 HTTP 服务器 (vertx.createHttpServer) 用于同一主机和 同一个端口

    TCP 连接只允许单个进程在同一主机上的同一端口上侦听。有一些方法可以解决这个问题(请参阅对 this question 的回复),但我不确定这样做是否是最佳解决方案。

    ...对于同一主机和同一端口具有唯一路由

    Vertx-Web 提供了多种路由请求的方法。我最近使用的一种方法是sub-router,这对您来说可能是一个可行的解决方案。您可以配置一个“主”路由器,为您想要的每个“唯一路由”将请求路由到不同的路由器。

    【讨论】:

    • SO_REUSEADDR 套接字选项仅在您的进程处理相同请求时才有效。内核将在监听进程之间对新的 TCP 连接进行负载平衡,并且不知道您的路由需求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    • 2014-09-07
    • 1970-01-01
    相关资源
    最近更新 更多