2016-11-16 17 views
0

클라이언트가 인터넷을 통해 서버와 통신 할 수있는 Akka 프로그램으로 포트 포워딩을 수행하려고합니다. 내 라우터를 구성하고 포트 포워딩 메커니즘이 작동하지만 Akka에 문제가있는 것 같습니다.Akka 포트 전달

문제는 클라이언트가 원격 액터를 서버에서 가져올 수 없다는 것입니다. 받는 사람이 다른 서버 쪽에서 오류가 계속 발생합니다. 클라이언트는 "akka.tcp://[email protected]:5150/user/remote"을 통해 원격 액터를 얻고 있습니다. 여기서 67.18.67.18은 내 글로벌 IP 주소입니다. 그런 다음 원격 액터는 "akka.tcp://[email protected]6: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이 올바른 메커니즘이라고 생각한다. 고마워. – 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 –