2012-08-31 5 views
7

C'è un modo semplice per ottenere l'indirizzo IP di un nodo Erlang collegata? Mi piacerebbe avviare una connessione SCTP con pochi nodi e per il modo in cui il sistema è stato progettato, la conoscenza che ho di loro è solo il loro nodo) atomo (.Come faccio a ottenere l'indirizzo IP di un nodo di Erlang?

Più precisamente, mi chiedo se ci sia qualche API fornita da Erlang (o qualche tecnica derivata) che permetta di ottenere l'indirizzo IP di un nodo dato il suo identificatore atom().

risposta

4

È possibile utilizzare il modulo RPC per chiamare la funzione su un nodo estera

esempio:

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

nota: questo funziona solo sui nodi che sono già collegati mediante distribuzione di Erlang

2

Ho risolto questo problema avviando un processo sul nodo e avente il processo invia un messaggio contenente gli indirizzi IP. Se qualcuno sa di una soluzione più elegante, mi piacerebbe sentirlo.

era stato avviato il comando che ho usato per ottenere l'indirizzo dopo il processo sul nodo era: inet:getif(). Tieni presente che il risultato di tale comando include l'indirizzo di loop-back.

una cosa da considerare è che ogni nodo può avere più indirizzi IP e il server SCTP non si può ascoltare su ognuna di esse.

L'altra idea che ho pensato di provare era convertire l'atomo restituito da node() in una stringa, analizzare la stringa per ottenere il nome host ed eseguire una ricerca DNS. Potrebbe funzionare, ma non l'ho mai provato. Il risultato della ricerca DNS dovrebbe essere memorizzato nella cache, quindi potrebbe non esserci un round trip della rete. Inoltre, odio davvero assumendo qualcosa sul ritorno dell'atomo da node().

+0

Sì, ho pensato di fare questo, ma ho voluto ridurre al minimo il tempo che intercorre tra sapendo che ho bisogno di inviare i dati, e l'effettivo invio dei dati, in modo ed extra ciclo avanti e indietro sarebbe l'ultima risorsa. – matehat

2

E ' sembra net_kernel:nodes_info() - per tutti i nodi - e net_kernel:node_info(Node) per un singolo nodo - avere queste informazioni, e di più, anche se non sembra è pubblicato nella pagina man. Questa sembra una soluzione migliore in qualche modo perché funzionerà anche con elementi come i nodi Java e C a cui non è possibile inviare funzioni.