谁在没有领导者的对等网络中发起领导者选举? 这是我在接收消息时实现的一些代码。
if (message.startsWith(ELECTION)) {
int recievedID = Integer.parseInt(ripMessage(ELECTION, message));
if (processID > recievedID) {
sendToAll(ELECTION + processID);
} else if (processID < recievedID) {
sendToAll(ACKNOWLEDGE);
}
} else if (message.startsWith(ACKNOWLEDGE)) {
ackRecv++;
if (connections.size() == ackRecv) {
connection.sendMessage(LEADER + processID);
this.isLeader = true;
this.leaderID = processID;
ackRecv = 0;
}
} else if (message.startsWith(LEADER)) {
int recievedID = Integer.parseInt(ripMessage(LEADER, message));
this.leaderID = recievedID;
this.isLeader = false;
}
答案 0 :(得分:2)
答案 1 :(得分:2)
结帐Paxos consensus algorithm。对于P2P案例,该算法本身可能过于苛刻......仍然可能是您需要解决的问题列表。
超短版 - 大多数参与者(法定人数)必须就最高版本的选举讯息{领导者,版本}达成一致。如果在大约同一时间开始多次选举,可能需要多轮。