2015-05-23 77 views
0


我剛開始使用Akka(Java),我有一個問題,我不知道如何解決。Akka java - 同步兒童演員

我有N個玩家和一個oracle。 一旦創建,所有玩家必須與必須迴應「贏家/輸家」的預言者溝通。

的問題是,我不知道又將溝通的球員,整齊,一次一個策略:
例如:PLAYER1 - > player2 - > player3 - > PLAYER1 - >播放器2 - >。 ..

玩家等級:

public class MyPlayers extends UntypedActor { 

/* 
* I created one context of N Player 
*/ 
public MyPlayers() { } 

public void preStart() { 
    //in this way all N players at the beginning, start to communicate concurrently. 
    ActorSelection oracle = getContext().actorSelection("//Main/user/app/oracle"); 
    oracle.tell(new MyMessage(myValue), getSelf()); 
} 

@Override 
public void onReceive(Object msg) throws Exception { 

    if (msg instanceof MyMessage) { 
     //do something 
     sender().tell(MyMessage, getSelf()); 

    } 


    if (msg instanceof DoneMsg) { 
     if (((DoneMsg) msg).isDone()) { 
      log("Stop Players"); 
      getContext().stop(getSelf()); 
     } 
    } 

} 

甲骨文類:

public class Oracle extends UntypedActor { 
private int nPlayers; 
public Oracle(int nPlayers) { 
    this.nPlayers = nPlayers; 
} 

public void preStart() { 
    stateGame = false; //When the play starter, there is not any wins. 
} 

@Override 
public void onReceive(Object msg) throws Exception { 

    if (msg instanceof MyMessage) { 
     if (!stateGame) { 
      //do something 
      sender().tell(MyMessage, getSelf()); 
     } 
     else { 
      //do something 
      getContext().stop(getSelf()); 
     } 
    } 
} 

什麼是溝通在玩家的最佳策略排除競爭有序嗎?

感謝所有。

+0

這不是一個明確的問題,你想讓所有的演員同時收到信息嗎?或者你只是想知道通過它們循環併發送消息的最佳方式?如果是後者,我會考慮刪除這個問題。 – Snickers3192

回答

0

你的基本的兩種方式將消息發送到演員有序:
1.輪轉路由器,玩家都routies
2.數組或集合抱着玩家的引用,並通過他們

迭代無關備註:
避免演員選擇。通過構造函數/道具或消息將oracle引用傳遞給玩家。選擇很少有理由(主要是爲了遠程處理),這是一種危險的做法。