2012-08-31 2 views
7

연결된 erlang 노드의 IP 주소를 얻는 간단한 방법이 있습니까? 몇개의 노드와 SCTP 연결을 시작하고 싶습니다. 그리고 시스템이 설계되는 방식 때문에, 제가 가지고있는 지식은 node() 원자 일뿐입니다.erlang 노드의 IP 주소를 얻으려면 어떻게해야합니까?

좀 더 정확히 말하자면, 식별자 atom()이 주어지면 노드의 IP 주소를 얻을 수있는 Erlang (또는 일부 파생 된 기술)에서 제공하는 API가 있는지 궁금합니다.

답변

4

당신은 외국 노드에서 함수를 호출하도록 RPC 모듈을 사용할 수 있습니다

예 :

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

참고 : 이미 얼랑 분포를 통해 연결되어있는 노드에서이 유일한 작품

2

노드에서 프로세스를 시작하고 프로세스가 해당 IP 주소를 포함하는 메시지를 보내도록하여이 문제를 해결했습니다. 누구든지 좀 더 우아한 해결책을 알고 있다면 나는 그것을 듣고 싶다.

노드에서 프로세스가 시작된 후 주소를 가져 오는 데 사용한 명령은 inet:getif()입니다. 해당 명령의 결과에는 루프백 주소가 포함됩니다.

각 노드가 여러 개의 IP 주소를 가질 수 있으며 SCTP 서버가 모든 노드에서 수신 대기하지 않을 수도 있습니다.

내가 생각한 또 다른 아이디어는 node()에서 반환 된 아톰을 문자열로 변환하고 문자열을 구문 분석하여 호스트 이름을 얻은 다음 DNS 조회를 수행하는 것이 었습니다. 그것은 효과가 있을지 모르지만, 나는 결코 그것을 시도하지 않았다. DNS 조회의 결과는 캐시되어야하므로 네트워크 라운드 트립이 발생하지 않을 수 있습니다. 또한, 나는 node()로부터의 원자 반환에 대해 아무 것도 가정하는 것을 정말로 싫어한다.

+0

그래, 그 일을 생각해 보았지만 데이터를 보내야한다는 것을 알기까지의 시간을 최소화하고 싶었고 실제 데이터를 보내야하므로 여분의 앞뒤 순환이 마지막 수단이었습니다. – matehat

2

그것을 모든 노드의 경우 net_kernel:nodes_info()처럼 보이고 단일 노드의 경우 net_kernel:node_info(Node) -이 정보는 맨 페이지에 게시 된 것처럼 보이지 않지만 더 자세하게 표시됩니다. 이것은 Java와 C 노드와 같은 기능을 전달할 수 없기 때문에 더 좋은 솔루션으로 보입니다.

관련 문제