接続されたerlangノードのIPアドレスを取得する簡単な方法はありますか?いくつかのノードでSCTP接続を開始したいのですが、システムの設計方法により、それらについての知識はそれらのnode()アトムにすぎません。
もっと正確に言えば、識別子atom()を指定してノードのIPアドレスを取得できるErlang(または派生手法)によって提供されるAPIがあるかどうか疑問に思っています。
接続されたerlangノードのIPアドレスを取得する簡単な方法はありますか?いくつかのノードでSCTP接続を開始したいのですが、システムの設計方法により、それらについての知識はそれらのnode()アトムにすぎません。
もっと正確に言えば、識別子atom()を指定してノードのIPアドレスを取得できるErlang(または派生手法)によって提供されるAPIがあるかどうか疑問に思っています。
rpcモジュールを使用して、外部ノードで関数を呼び出すことができます
例:
rpc:call(Node,inet,getif,[])
注:これは、アーラン分布を介してすでに接続されているノードでのみ機能します
この問題は、ノードでプロセスを開始し、プロセスにIPアドレスを含むメッセージを送信させることで解決しました。誰かがもっとエレガントな解決策を知っているなら、私はそれを聞きたいです。
ノードのプロセスが開始された後にアドレスを取得するために使用したコマンドは次のとおりinet:getif()
です。そのコマンドの結果にはループバックアドレスが含まれることに注意してください。
考慮すべき点は、各ノードに複数のIPアドレスがあり、SCTPサーバーがそれらすべてをリッスンしていない可能性があることです。
私が試したもう1つのアイデアは、node()から返されたアトムを文字列に変換し、文字列を解析してホスト名を取得し、DNSルックアップを実行することでした。それはうまくいくかもしれませんが、私はそれを試したことがありません。DNSルックアップの結果はキャッシュする必要があるため、ネットワークのラウンドトリップが発生しない可能性があります。また、node()からのアトムリターンについて何かを想定するのは本当に嫌いです。
マニュアルページに公開されているようには見えませんが、net_kernel:nodes_info()
すべてのノードおよび単一のノードについて、この情報などが含まれているように見えます。net_kernel:node_info(Node)
これは、関数を送信できないJavaノードやCノードなどでも機能するため、いくつかの点でより優れたソリューションのように思われます。