2016-11-16 15 views
0

クライアントがインターネット経由でサーバーと通信できるAkkaプログラムに対してポート転送を実行しようとしています。私はルータを設定して、ポート転送メカニズムは動作していますが、Akkaに問題があるようです。Akkaポート転送

問題は、クライアントがリモートアクターをサーバーから取得できないことです。それは受信側が異なるサーバー側でエラーを出し続けます。クライアントは"akka.tcp://[email protected]:5150/user/remote"によってリモートアクターを取得しています。ここでは67.18.67.18が私のグローバルIPアドレスです。次に、リモートアクターは"akka.tcp://[email protected]:5150/user/remote"のパスでリモーティングします。ここで、192.168.0.106はサーバーのローカルIPです。私は、クライアントが同じパスを使用してリモートアクターにアクセスする必要があることを知っていますが、public-localnameを定義しても、サーバーはグローバルIPをローカルIPに変換したり、グローバルIP経由でアクセスを許可しません。回避策はありますか?以下はサーバーのapplication.confです。

akka { 
    loglevel = "INFO" 

    actor { 
    provider = "akka.remote.RemoteActorRefProvider" 
    } 

    remote { 
    enabled-transports = ["akka.remote.netty.tcp"] 
    netty.tcp { 
     hostname = "" 
     port = 5150 
     public-hostname = "67.18.67.18" 
    } 

    log-sent-messages = on 
    log-received-messages = on 
    } 

} 

答えて

0

configパラメータは、バインドするインターフェイスの「bind-hostname」とパブリックIPの「hostname」です。ローカルポートをバインドするには "bind-port"を設定し、パブリックIPは "port"に設定する必要があります。

詳細については、ドキュメントを参照してください。http://doc.akka.io/docs/akka/snapshot/scala/remoting.html

+0

私はそのドキュメントを紛失しました。私は前にどこかでそれを見たことを覚えています。私は、public-hostnameが正しいメカニズムであることを確信しています。ありがとうbtw。 – Ginsan

+0

ところで、あなたはconf内のローカルアドレスを取得する方法を知っていますか?私はhostname = ""が自動的にInetAddress.getLocalHost.getHostAddressを使用することを知っています。しかし、bind-hostnameの場合は動作しません。私はbind-hostname = "InetAddress.getLocalHost.getHostAddress"を試しても動作しません。私は本当にconfのアドレスを明示的に定義したくありません。ありがとうございました。 – Ginsan

+0

オプションのシステムプロパティオーバーライドを使用して設定ファイルにデフォルト値を指定し、起動時にその値をシステムプロパティとして設定します。https://github.com/typesafehub/config#optional-system-or-env-variable-overrides –

関連する問題