Erlang邻居搜索

发布于 2024-08-22 12:09:47 字数 198 浏览 7 评论 0原文

我有几台互连的计算机。每台机器上都运行着 Erlang 节点,我想通过 Erlang 术语(点对点风格)相互通信。但是,只有在我 net_adm:ping 等之后,其他计算机上的节点才会在 nodes() 中列出。有没有什么方法可以找出所有节点(具有相同的节点) cookie)在 LAN 上(并且每台计算机上没有存储邻居列表)?

I have couple of interconnected computers. On every machine there is running Erlang node and I'd like to communicate with each other passing Erlang terms (peer-to-peer style). However nodes on other computers are listed in nodes() only after I net_adm:pinged them etc. Is there any way how to find out what all nodes (with the same cookie) are on LAN (and without having list of neighbours stored on each computer)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我的黑色迷你裙 2024-08-29 12:09:47

目前 Erlang/OTP 中没有 LAN 发现系统,但有几种方法可以实现:

  • 读取 inet:getif() 以获取 LAN 子网列表,然后调用 (net_kernel():epmd_module()):names(IP) 为每个子网中的每个 IP 地址收集正在运行的节点列表,然后 net_adm:ping() 将它们全部连接起来。我认为这假设 DNS 解析正常,以便您可以将 IP 转换为名称,以便 ping 正常工作。 (我对节点连接的确切要求有点生疏)
  • 运行类似 nodefinder 的东西每个节点。 Nodefinder是一个发现库,可以使用多播udp来发现LAN上的Erlang节点。

There's no LAN discovery system in Erlang/OTP right now, but there are a few ways you could go about it:

  • Read inet:getif() for a list of LAN subnets, and then call (net_kernel():epmd_module()):names(IP) for each IP address in each subnet to collect the list of running nodes, then net_adm:ping() them all to connect. I think this assumes that DNS resolution is working so that you can convert the IP to a name so that the ping will work. (I'm a little rusty on the exact requirements for node connections)
  • Run something like nodefinder on each node. Nodefinder is a discovery library that can use multicast udp to discover Erlang nodes on a LAN.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文