我有一个p2p网络,其中有一些使用socket.io的nodejs服务器。每隔10秒,一台随机服务器应执行一项工作,因此服务器必须与谁进行工作进行沟通。
现在我像这样使用logik:
public generate() {
setInterval(() => {
this.randomNumber = Math.round(Math.random() * 1000);
// console.log("send rand number to all gens:", this.randomNumber);
this.generatorConnectionsInfo.forEach((gen: IGeneratorConnectionsInfos) => {
// console.log("send rand", this.randomNumber, "to", gen.peer);
gen.socket.emit("rand", this.randomNumber);
});
this.generating = setTimeout(() => {
console.log("do the job");
}, (8 * 1000);
}, (10 * 1000);
}
每个服务器都列出其他服务器的编号。如果其中之一比自己的低,则超时将停止:
public checkGeneration(rand: number) {
console.log("got", rand, "from gen");
if (rand > this.randomNumber) {
console.log("generation got canceled");
clearTimeout(this.generating);
}
}
因此,只有数量最多的服务器才能执行此工作。问题是要及时同步它们,以便间隔同时开始。