2010-02-21 6 views
5

J'ai quelques ordinateurs interconnectés. Sur chaque machine, il y a un nœud Erlang et je voudrais communiquer les uns avec les autres en utilisant les termes Erlang (style peer-to-peer). Cependant, les noeuds sur d'autres ordinateurs sont listés dans nodes() seulement après que je les ai net_adm:ping etc. Est-il possible de savoir comment tous les noeuds (avec le même cookie) sont sur le LAN (et sans avoir la liste des voisins stockés sur chaque ordinateur)?Erlang recherche de voisin

Répondre

9

dans Erlang/OTP Il n'y a aucun système de découverte LAN en ce moment, mais il y a quelques façons dont vous pouvez aller à ce sujet:

  • Lire inet:getif() pour une liste des sous-réseaux LAN, puis appelez (net_kernel():epmd_module()):names(IP) pour chaque IP adresse dans chaque sous-réseau pour collecter la liste des noeuds en cours d'exécution, puis net_adm: ping() les tous à se connecter. Je pense que cela suppose que la résolution DNS fonctionne afin que vous puissiez convertir l'IP en un nom afin que le ping fonctionne. (Je suis un peu rouillé sur les exigences exactes pour les connexions de nœuds)
  • Exécuter quelque chose comme nodefinder sur chaque nœud. Nodefinder est une bibliothèque de découverte qui peut utiliser la multidiffusion udp pour découvrir les nœuds Erlang sur un réseau local.
+0

nodefinder est exactement ce que je dois. Merci. –