1

問題

2 台のコンピューターのそれぞれに 1 つずつ、2 つの Erlang ノードがあります。一意の sname と同じ Cookie を使用して各ノードを起動しています。クライアントからサーバーに net_adm:ping/1 しようとすると、最初にサーバーからクライアントに ping しない限り、常にタイムアウトになります。

たとえば、クライアントでは次のようになります。

(client@client_machine)1> net_adm:ping(server@server_machine).
pang

次に、サーバー上で:

(server@server_machine)1> net_adm:ping(client@client_machine).
pong

次に、クライアントから再び:

(client@client_machine)2> net_adm:ping(server@server_machine).
pong

両方のマシンのすべてのインバウンド接続とアウトバウンド接続に対して、erl.exe と werl.exe がファイアウォールを通過できるようにしました。-name; を使用してどちらの方向にも ping を実行できません。-sname を使用する必要があります。

質問

これはまだファイアウォールの問題ですか、それとも既知の動作ですか? 既知の問題の場合、回避策は何ですか? サーバーは、可能なクライアントに対して定期的に ping を試行しますか?

4

3 に答える 3

1

すべてを再確認した後、私はそれを理解しました:サーバーに C:\Program Files\erl5.9.1\bin\erl.exe を許可するファイアウォール ルールがありましたが、C:\Program Files\erl5.9.1\ erts-5.9を実行していました.1 \bin\erl.exe。

私はそのようなものを見逃すのはばかげていると感じますが、他の誰かがこれから利益を得ることができるように、私はそれを所有する方がよいと考えました:/

于 2012-08-24T02:23:57.077 に答える
1

まず第一に、 から ping (通常pingは erlang の ping ではありません)server_machineを送信client_machineすると、 が得られis aliveますか? 通常、ノードが同じコンピューター/サーバー上にない場合は、-nameand NOT-sname オプションを使用する必要があります。

2 台のマシンが通常の を使用してお互いを認識できる場合は、マシンの をping使用してノードを起動してみてくださいIP Adresses。たとえば、client_machine = 192.168.100.2ノードserver_machine = 192.168.100.5は次のように開始する必要があります。

# erl -name client@192.168.100.2 -setcookie mycookie
# erl -name server@192.168.100.5 -setcookie mycookie

次に、 を実行してerlang ping、何が起こるかを確認します。また、Resolvable namesieを使用しているため、使用しclient_machineている場合はUNIX / LINUX、IP アドレスとマシンの名前を追加する必要があります。/etc/hostsまたは、少なくとも 2 つのマシンが同じ DNS サーバーを使用するようにして、それらの名前を解決できるようにします。また、erlang のドキュメントを読むと、erlang にも相当するものがあるnet_admことがわかります。/etc/hosts

于 2012-08-22T05:54:15.220 に答える
0

「client_machine」と「server_machine」の両方を解決できますか? ping server_machineコマンドラインから確認できます。

同じ物理インスタンスで実行し、仮想ノードごとに異なる sname を持っているため、両方とも到達可能である必要があります。たとえば、両方とも /etc/hosts (Windows の場合は windows/system32/drivers/etc/hosts) にレコードがあります。

于 2012-08-23T05:35:00.080 に答える