【问题标题】:How do I get the IP address of an erlang node?如何获取 erlang 节点的 IP 地址?
【发布时间】:2014-10-02 18:21:50
【问题描述】:

有没有一种简单的方法来获取连接的 erlang 节点的 IP 地址?我想启动与几个节点的 SCTP 连接,由于系统的设计方式,我对它们的了解只是它们的 node() 原子。

更准确地说,我想知道是否有一些由 Erlang 提供的 API(或一些派生技术)允许在给定标识符 atom() 的情况下获取节点的 IP 地址。

【问题讨论】:

    标签: erlang


    【解决方案1】:

    您可以使用 rpc 模块调用外部节点上的函数

    示例:

    rpc:call(Node,inet,getif,[])
    

    注意:这仅适用于已通过 erlang 分发连接的节点

    【讨论】:

      【解决方案2】:

      我通过在节点上启动一个进程并让该进程发送一条包含其 IP 地址的消息来解决了这个问题。如果有人知道更优雅的解决方案,我想听听。

      节点上的进程启动后我用来获取地址的命令是:inet:getif()。请记住,该命令的结果包括环回地址。

      需要考虑的是每个节点可能有多个 IP 地址,而 SCTP 服务器可能不会监听所有这些。

      我想尝试的另一个想法是将 node() 返回的原子转换为字符串,解析字符串以获取主机名,并执行 DNS 查找。它可能有效,但我从未尝试过。 DNS 查找的结果应该被缓存,因此可能没有网络往返。另外,我真的很讨厌假设任何关于从 node() 返回的原子。

      【讨论】:

      • 是的,我想过这样做,但我想尽量减少知道我需要发送数据和实际发送数据之间的时间,因此额外的来回循环将是一个最后的手段。
      【解决方案3】:

      它看起来像net_kernel:nodes_info() - 对于所有节点 - 和 net_kernel:node_info(Node) 对于单个节点 - 有这些信息,还有更多,尽管它看起来不像在手册页中发布。在某些方面,这似乎是一个更好的解决方案,因为它也适用于您无法向其发送函数的 Java 和 C 节点。

      【讨论】:

        猜你喜欢
        • 2017-05-12
        • 2019-10-26
        • 2016-06-30
        • 2018-08-26
        • 2022-01-23
        • 1970-01-01
        • 1970-01-01
        • 2017-07-02
        • 2010-12-26
        相关资源
        最近更新 更多