Redisを使用してロードバランサ/ログインサーバー/ゲームサーバーの設定を完了しようとしています。ロードバランシングもその1つです。私のRedisロードバランシングインスタンスでは、私は順序付きセットを使用しています。キーはアプリケーション名であり、メンバーはゲームサーバーのIPアドレスです。Erlang:自分のIPアドレスを見つける
ここに私の問題があります。私はerlang内でpublicメソッドを使いたいと思います。私のニーズに合ったものは何も見つかりません。私は何かを探しているのかしらと思っています。
{ok, L} = inet:getif(),
IP = element(1, hd(L)),
私が探しているものを提供します。私は現在それが{192,168,0,14}と信じています。しかし、この機能は「公開」ではありません。
私に{0,0,0,0}を与えます。私はinet:getaddr("owl")
を試してみましたが、それは私に{127,0,1,1}を与えます。
TCPを使用してメッセージを送信し、inet:peername(Socket)
を使用することに限定していますか?とてもシンプルなものを手に入れようと思っています。私のアプリケーションのすべての異なる部分は、テストのために同じコンピュータ上で実行されています。それは私に{127,0,0,1}を返すだろうか?それはうまくいかないでしょう。 IPをユーザー(私の携帯電話)に送り返して、適切なサーバーに接続できるようにする必要があります。ループバックは....私はすべての回答に感謝したいと思います
現在のコード
しないだろう。はい、私は新年のちょうど後にLol4t0のコメントに気付きました。だから私はそれを反映するように私のコードを変更しました。私のような遅い人のためにこれを投稿する。私は、これらのものをクリックするために私の脳をちょっと荒らさなければならない。
hd([Addr || {_, Opts} <- Addrs,
{addr, Addr} <- Opts,
{flags, Flags} <- Opts,
lists:member(loopback,Flags) =/= true]).
私はプロプリストを探していましたが、これがはるかに望ましいです。私はこのようにリストを構築することにあまり慣れていない。ありがとうございました。私は少し修正しました。おそらくあなたはこれがより好きかもしれません。 :) 私に起こったことは、次の(ipv6)ループバックを取得していたということでした...私があなたのサイズ制約を使用した場合、それは起こらなかったでしょう。 –
hd([Addr || {IF、Opts} < - Addrs、{addr、Addr} < - オプション、IF =/= "lo"])。 –
@NolanRobidouxこれはあなたにIPv4とIPv6の両方を無作為に与えることができ、 'lo0'のような名前のインタフェースを考慮に入れません。 –