7
votes

Comment puis-je obtenir l'adresse IP d'un nœud Erlang?

Y a-t-il un moyen simple d'obtenir l'adresse IP d'un nœud Erlang connecté? J'aimerais initier une connexion SCTP avec quelques nœuds et en raison de la manière dont le système est conçu, les connaissances que j'ai à leur sujet n'est que leur noeud () atome.

Plus précisément, je me demande s'il y a une API fournie par Erlang (ou une technique dérivée) qui permet d'obtenir une adresse IP d'un nœud compte tenu de son identifiant Atom ().


0 commentaires

3 Réponses :


4
votes

J'ai résolu ce problème en démarrant un processus sur le nœud et que le processus envoie un message contenant ses adresses IP. Si quelqu'un connaît une solution plus élégante, j'aimerais l'entendre.

La commande que j'ai utilisée pour obtenir l'adresse une fois que le processus sur le nœud avait été démarré était: inet: getif () . N'oubliez pas que le résultat de cette commande inclut l'adresse de boucle.

Quelque chose à considérer est que chaque nœud puisse avoir plusieurs adresses IP et que le serveur SCTP ne peut pas l'écouter sur chacun d'eux.

L'autre idée que j'ai pensée à essayer était de convertir l'atome renvoyé du nœud () dans une chaîne, analysez la chaîne pour obtenir le nom d'hôte et effectuer une recherche DNS. Cela pourrait marcher, mais je ne l'ai jamais essayé. Le résultat de la recherche DNS doit être mis en cache, il pourrait donc y avoir un aller-retour au réseau. En outre, je déteste vraiment à assumer quoi que ce soit sur le retour de l'atome du nœud ().


1 commentaires

Oui, j'ai pensé à le faire, mais je voulais minimiser le temps entre la connaissance de savoir que je dois envoyer des données et que l'envoi réel des données, ainsi qu'un cycle supplémentaire de retour en arrière et de retour supplémentaire serait un dernier recours.



5
votes

Vous pouvez utiliser le module RPC pour appeler la fonction sur un nœud étranger

Exemple: xxx

Remarque: cela ne fonctionne que sur des nœuds déjà connectés via Erlang Distribution


0 commentaires

2
votes

Il ressemble à net_kernel: nœuds_info () - pour tous les nœuds - et net_kernel: nœud_info (noeud) pour un seul noeud - avoir cette information et plus, bien que On ne ressemble pas à sa publication dans la page Man. Cela semble être une meilleure solution à certains égards, car il fonctionnera également avec des nœuds de Java et C que vous ne pouvez pas envoyer de fonctions à.


0 commentaires