【问题标题】:Javascript Vert.x EventBus Client SockJS get host and port of connectionJavascript Vert.x EventBus Client SockJS 获取主机和连接端口
【发布时间】:2017-04-05 04:43:15
【问题描述】:

我在 Java 中使用 Vert.x Core 3.3.3 和 Web 3.3.3 作为 EventBus 服务器,并在 Javascript 的 Web 客户端上使用 Vert.x 2.0.0 和 SockJS 1.1.1 来连接到 EventBus。我已连接,能够发送和接收消息,并且所有入站和出站流量都是开放的。一切正常。

当客户端连接时,我的服务器能够获取每个 EventBus 连接的主机和端口。这来自 Java 中 SockJSHandler 的桥接事件,通过 socket().remoteAddress() 格式为“host:port”。

在 Web 客户端,是否有获取 EventBus SockJS 连接到我的 Vert.x 服务器的 EventBus 的远程地址(服务器的主机和端口)的功能?我查看了 Vert.x Web Client (http://vertx.io/docs/jsdoc/ & https://github.com/vert-x3/vertx-web) 的文档,但没有发现任何有用的东西。

如果您需要更多信息,请告诉我。提前致谢。

编辑 1:

我误解了我在原始问题中实际寻找的内容,并且措辞不佳。当我建立连接时,我知道 EventBus 的主机和端口是什么(即 var eb = new EventBus('localhost:8080/eventbus'); 正如@Paulo 所说)。

我实际上正在寻找的是我的客户端在该 EventBus 上注册的处理程序的主机和端口。如上所述,我可以在服务器端看到这一点。主机作为 IP 地址返回,而不是我在客户端创建 EventBus 连接时传入的地址。并且端口不同,因为为该处理程序(?)建立了一个新的 SockJS 连接。是否可以为我的客户端的 Handler 获取 SockJS 连接的主机和端口,尤其是端口。

【问题讨论】:

    标签: javascript vert.x sockjs


    【解决方案1】:

    您想拥有的信息是您已经知道的。当您从客户端 Web 应用程序创建事件总线连接时,您可以:

    var eb = new EventBus('http://localhost:8080/eventbus');
    

    如您所见,您必须传递给构造函数的参数包含您想知道的内容:

    localhost:8080
    

    大多数情况下,您不想使用硬编码的主机名 + 端口,而是使用您的 html 的位置,因此在 JavaScript 中您可以这样做:

    window.location.host
    

    这将为您提供服务器运行的位置。

    【讨论】:

    • 服务器的位置与 SockJS 处理程序连接到 EventBus 的位置不同。例如:我如上所述连接到 localhost:8080。但是,我分配给 EventBus 的处理程序连接到不同的端口。我可以通过上述方式在服务器端看到这一点。在这种情况下,我在服务器端的客户端地址返回为 xxx.xx.xx.xxx:36138。我想知道我是否可以获得这个地址(尤其是我的 SockJS 端口)用作服务器和客户端之间的唯一引用。
    • 我相信我最初的问题具有误导性,并且解释得不够清楚。正如@Paulo 提到的,当我建立连接时,我有 EB 连接主机和端口。我真正要寻找的是我在该 EB 上注册的客户处理程序的主机和端口。我会更新问题。
    猜你喜欢
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 2010-09-06
    相关资源
    最近更新 更多