7

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

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

4

3 回答 3

5

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

例子:

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

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

于 2012-09-16T15:41:06.847 回答
4

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

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

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

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

于 2012-08-31T17:09:45.223 回答
2

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

于 2014-10-02T10:21:50.210 回答