2012-05-19 4 views
0

alive(port)RemoteActor의 메서드는 매개 변수로 IP 주소를 사용하지 않습니다.스칼라 RemoteActor 다중 네트워크 인터페이스

내부적으로 사용 가능한 인터페이스의 IP를 반환하는 Java의 InetAddress.getLocalHost().getHostAddress()을 호출하여 IP 주소를 확인하는 객체 인 TcpService을 생성합니다.

잘못된 IP 주소를 반환 할 수 있으므로 네트워크 인터페이스가 여러 개인 컴퓨터에서 문제가 발생합니다.

이 문제를 극복 할 수있는 방법이 있습니까?

감사합니다.

답변

1

좋은 질문입니다. 솔루션에 얼마나 투자하고 싶은지에 달려 있습니다. 두 가지 방법을 상상해 볼 수 있습니다.

1) 기본 구현을 변경하는 첫 번째 방법은 스스로 더 나은 것을 작성하는 것입니다. 원격 배우 라이브러리의 모든 코드는 GitHub에서 사용할 수 있기 때문에 그리 어렵지 않습니다.

나의 제안은 특히 같은 73 라인의 TcpSerice 클래스의 일부를 다시 구현하는 것입니다 :

private val internalNode = { 
    val interfaces = NetworkInterface.getNetworkInterfaces() 
    val interface = ... // find the right interface here 
    val addresses = interface.getInetAddresses() 
    val address = ... // find the right address here 
    new Node(address, port) 
} 

도 추가하거나 변경하려면 다른 물건을 사용자 정의 할 수 있습니다이 방법 다른 것.

2) 다른 간단한 방법은 기본 구현을 모두 사용하지 않고 대신 매우 인기있는 액터 프레임 워크 akka을 사용하는 것입니다. Akka는 많은 추가 기능뿐만 아니라 효율성과 견고성을 제공합니다. GitHubServer 클래스를 보면 호스트가 실제로 전역 구성 항목 "호스트 이름"에서 읽혀지는 것을 알 수 있습니다. 구성을 조작하는 방법에 대한 자세한 안내는 here입니다. 위와 유사한 코드를 사용하여 올바른 인터페이스와 주소를 찾을 수 있어야합니다.

희망 하시겠습니까?