2016-02-15 13 views
9

一つは、使用してIEXによりエリクサーノードを初期化することができますElixir/Erlangでは、どのポートが `Node.connect`に使用されていますか?

iex --sname [email protected] --cookie foo 

をし、別の1が使用してREPLで、このノードを接続することができます。

Node.connect(:"[email protected]") 

接続がTCPプロトコルであるようです。しかし、使用するポートを指定するために、documentにパラメータが見つかりませんでした。誰にもこれについてのアイデアはありますか?

答えて

8

の接続ノードは、ポートにデフォルトで実行さErlang Port Mapping Daemon (epmd)によって処理されます。マニュアルの内容:

異なるポートを指定すると、ノードの独立したクラスタを表すepmdの複数のインスタンスを同じホスト上に共存させることができます。クラスタ内のすべてのノードは、同じepmdポート番号を使用する必要があります。

実際のノードがランダム(?)ポートを開き、そのsnameへのローカルepmdと一緒にこれを発表しました。 '[email protected]'に接続すると、'node1'の情報については、Erlang VMがリモートのepmdにポート4369の10.99.1.50を実行するように要求します。これは、プロセスが直接接続する実際のポート番号で応答します。

5

この投稿によると、Erlang Distribution ErlangはTCP上でポート4369を使用します。この投稿にはこれに関するさらに詳しい情報があります。ファイアウォールの

:アーラン分布はEPMDならびに各ノードのためのランダムポートのポートを使用します。 Erlangカーネルアプリケーション環境設定inet_dist_listen_minとinet_dist_listen_maxを使用して、これらのランダムポートの範囲を制限することができます。これらのポートでは、TCP接続を受信する必要がありますが、クラスタの他のホストからのみ許可する必要があります。

また、このに興味があるかもしれない:Chris McCoord on the subject

+1

ポート4369は、実際のポートの通信にのみ使用されます。 – filmor

+0

@filmorが正しいようです。修正していただきありがとうございます。 –

関連する問題