Erlang поиск соседей - PullRequest
       9

Erlang поиск соседей

5 голосов
/ 21 февраля 2010

У меня есть пара взаимосвязанных компьютеров. На каждой машине работает узел Erlang, и я хотел бы общаться друг с другом, передавая термины Erlang (в стиле peer-to-peer). Однако узлы на других компьютерах перечислены в nodes() только после того, как я net_adm:ping их редактировал и т. Д. Есть ли способ узнать, что все узлы (с тем же файлом cookie) находятся в локальной сети (без сохранения списка соседей на каждый компьютер)?

1 Ответ

9 голосов
/ 21 февраля 2010

В настоящее время в Erlang / OTP нет системы обнаружения локальной сети, но есть несколько способов сделать это:

  • Считайте inet:getif() для получения списка подсетей ЛВС, а затем вызовите (net_kernel():epmd_module()):names(IP) для каждого IP-адреса в каждой подсети, чтобы собрать список работающих узлов, затем net_adm: ping (), чтобы все они подключились. Я думаю, что это предполагает, что разрешение DNS работает так, что вы можете преобразовать IP в имя, чтобы пинг работал. (Я немного устала от точных требований к соединениям узлов)
  • Запустите что-то вроде nodefinder на каждом узле. Nodefinder - это библиотека обнаружения, которая может использовать многоадресный протокол udp для обнаружения узлов Erlang в локальной сети.
...