2012-08-31 5 views
7

Czy istnieje prosty sposób uzyskania adresu IP podłączonego węzła Erlang? Chciałbym zainicjować połączenie SCTP z kilkoma węzłami, a ze względu na sposób, w jaki został opracowany system, wiedza o nim jest tylko ich atomem węzła().Jak uzyskać adres IP węzła erlang?

Dokładniej, zastanawiam się, czy jest jakieś API dostarczone przez Erlanga (lub jakąś technikę pochodną), które pozwala na uzyskanie adresu IP węzła z jego identyfikatorem atomu().

Odpowiedz

4

można użyć modułu RPC wywołać funkcję w węźle zagranicznej

przykład:

rpc:call(Node,inet,getif,[]) 

uwaga: to działa tylko na węzłach, które są już podłączone poprzez rozkład erlanga

2

I rozwiązać ten problem poprzez rozpoczęcie procesu na węźle i posiadające proces wysłać wiadomość zawierającą swoje adresy IP. Jeśli ktoś wie o bardziej eleganckim rozwiązaniu, chciałbym to usłyszeć.

Komenda Kiedyś uzyskać adres po procesie w węźle został rozpoczęty było: inet:getif(). Pamiętaj, że wynik tego polecenia zawiera adres zwrotny.

coś do rozważenia jest to, że każdy węzeł może mieć wiele adresów IP i serwer SCTP nie można słuchać na wszystkie z nich.

Innym pomysłem myślałem o próbie było przekształcić atom wrócił z węzła() na ciąg znaków, analizowania ciąg aby uzyskać nazwę hosta i przeprowadzić wyszukiwanie DNS. To może zadziałać, ale nigdy tego nie próbowałem. Wynik wyszukiwania DNS powinien być zapisany w pamięci podręcznej, więc może nie być podróży w obie strony. Ponadto, naprawdę nienawidzę zakładając cokolwiek o powrocie atomu z węzła().

+0

Tak, myślałem o zrobieniu tego, ale chciałem, aby zminimalizować czas między wiedząc, że trzeba wysłać dane, a rzeczywista wysyłanie danych, tak i dodatkowy cykl wstecz i do przodu byłby ostatecznością. – matehat

2

It wygląda net_kernel:nodes_info() - dla wszystkich węzłów - i net_kernel:node_info(Node) dla pojedynczego węzła - posiada te informacje, i więcej, mimo że nie wygląda to publikowane na stronie man. W pewnym sensie wydaje się to lepszym rozwiązaniem, ponieważ działa również z takimi obiektami, jak Java i C, do których nie można wysyłać funkcji.