Akka java-同步儿童演员

Akka java-同步儿童演员,java,akka,Java,Akka,我刚开始学习Akka(Java),我有一个不知道如何解决的问题 我有N个玩家和一个神谕。 一旦创建,所有玩家都必须与甲骨文沟通,甲骨文必须回答“赢家/输家” 问题是,我不知道如何依次、整齐、一次一个地与玩家沟通: 例如:player1->player2->player3->player1->player2-> 球员级别: public class MyPlayers extends UntypedActor { /* * I created one context of N Player */


我刚开始学习Akka(Java),我有一个不知道如何解决的问题

我有N个玩家和一个神谕。 一旦创建,所有玩家都必须与甲骨文沟通,甲骨文必须回答“赢家/输家”

问题是,我不知道如何依次、整齐、一次一个地与玩家沟通:
例如:player1->player2->player3->player1->player2->

球员级别:

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());
        }
    }

}
Oracle类:

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());
        }
    }
}
通过排除竞争,有序地与玩家沟通的最佳策略是什么


感谢大家。

您有两个基本选项可以有序地向参与者发送消息:
1.循环路由器,其中玩家是路由
2.数组或集合,包含对玩家的引用并对其进行迭代

无关注释:

避免选择演员。通过玩家的构造函数/道具或消息将oracle引用传递给玩家。选择很少是正当的(主要是为了远程处理),这是一种危险的做法。

这不是一个明确的问题,您是否希望所有参与者同时接收信息?或者你只是想知道循环浏览它们并发送消息的最佳方式?如果是后者,我会考虑删除这个问题。