2011-11-23 3 views
1

서버의 여러 인스턴스 (Akka 원격 액터)를 실행할 수있는 노드가 있습니다. 클라이언트가 특정 노드에서 라이브 서버를 찾는 범위의 포트를 검색 할 수있게하고 싶습니다.Akka 액터 검색하기

내가 궁금
private def scanHost(serverHost: String) = { 
    val initialPort = 36627 
    val portsToScan = (initialPort until initialPort + 32).toList 
    val tries = portsToScan map { 
     port ⇒ remote.actorFor("EnMAS-service", serverHost, port) ? Discovery 
    } 
    val replies = tries filter { future ⇒ { 
     try { 
     future.get match { 
      case reply: DiscoveryReply ⇒ true 
      case _ ⇒ false 
     } 
     } 
     catch { case _ ⇒ false } 
    }} 
    ClientManager.ScanResult(replies map {_.get.asInstanceOf[DiscoveryReply]}) 
    } 

,이 작업을 수행하려면 좀 더 관용적 방법이 :

나는 나의 클라이언트 배우에서이 방법을 썼다? 이 사용 사례는 매우 흔한 일이지만 상상할 수는 없습니다.

답변

3

클러스터가 끝난 것처럼 들립니다. Akka 2.1이 제공 될 때까지 (클러스터 지원이 내장 된) ZooKeeper 또는 JGroups과 같은 것을 사용하거나 떠나거나 (시간 초과) 출발하거나 등록 취소 할 때 노드를 등록 할 수 있습니다.

+0

그래, 기본적으로 클러스터를 설정 중입니다. 각 "클러스터"에는 동료를 동기화하는 임의의 헤드 노드가있는 파리. 다른 종속성을 피하기 위해 Scala 표준 라이브러리와 Akka 프레임 워크에 머물길 바랬습니다. Akka에 현재 내장되어있는 관리자가 있어야하지만 향후 클러스터 지원을 기대합니다. 정보 주셔서 감사합니다. –

+0

글쎄, 당신은 전화를 걸고 클라이언트를 추적하는 랑데뷰 노드를 갖는 것으로 ad-hoc 할 수 있습니다. 분산 된 오류 탐지는 사소한 것이 아니기 때문에 클러스터링을 2.1의 주요 기능으로 발표했습니다 –