有没有一种简单的方法来获取连接的erlang节点的IP地址?我想用几个节点启动SCTP连接,并且由于系统的设计方式,我对它们的了解只是它们的node()原子。
更确切地说,我想知道Erlang(或某些派生技术)提供的API是否允许在给定标识符atom()的情况下获取节点的IP地址。
答案 0 :(得分:4)
您可以使用rpc模块在外部节点上调用该函数
示例:
rpc:call(Node,inet,getif,[])
注意:这仅适用于已通过erlang分发连接的节点
答案 1 :(得分:3)
我通过在节点上启动进程并让进程发送包含其IP地址的消息来解决此问题。如果有人知道更优雅的解决方案,我想听听。
我在节点启动过程后用于获取地址的命令是:inet:getif()
。请记住,该命令的结果包括环回地址。
需要考虑的是每个节点可能有多个IP地址,而SCTP服务器可能没有全部监听。
我想到的另一个想法是将node()返回的原子转换为字符串,解析字符串以获取主机名,然后执行DNS查找。它可能会奏效,但我从未尝试过。应该缓存DNS查找的结果,因此可能没有网络往返。另外,我真的很讨厌从node()返回原子的任何内容。
答案 2 :(得分:2)
看起来net_kernel:nodes_info()
- 对于所有节点 - 以及net_kernel:node_info(Node)
对于单个节点 - 具有此信息等等,尽管它看起来不像在手册页中发布的那样。在某些方面,这似乎是一个更好的解决方案,因为它也可以用于您无法发送函数的Java和C节点等。