ソーシャルチェスゲームを実装しています。すべてのユーザーは新しいゲームを作成でき、システムが対戦相手を見つけるまで待ちます。
ユーザーがゲームを作成するとき、彼らは制約を指定します: プレイしたい色と対戦相手の最小チェス レーティングです。
対戦相手は一致する場合と一致しない場合があります。たとえば、次の 2 つの対戦相手が一致します。
// User 1 with rating 1700 // User 2 with rating 1800
// creates this game // creates this game
game: { game: {
color: 'white', minRating: 1650
minRating: 1600 }
} // User did not specify a preferred color,
// meaning they do not care which color to play
そのため、ユーザー 1 がシステム内の最初のユーザーであり、ゲームを作成した場合、ユーザーは待機します。ユーザー 2 がゲームを作成すると、すぐにユーザー 1 と一致するはずです。
一方、次の 2 人の対戦相手はどちらも白でプレイしたいので、一致しません。この場合、他の誰かがcolor: 'black'
(または色が指定されていない) ゲームを作成するまで待つ必要があり、minRating
それは要件に一致します。
// User 1 with rating 1700 // User 2 with rating 1800
// creates this game // creates this game
game: { game: {
color: 'white', color: 'white'
minRating: 1600 minRating: 1650
} }
私の懸念は、何千人ものユーザーが同時に新しいゲームを作成するシナリオに関連しています。デッドロックを作成せずに対戦相手を一致させるにはどうすればよいですか? つまり、ユーザー 1、ユーザー 2、およびユーザー 3 が同時に対戦相手を見つけようとしていて、それらのマッチング アルゴリズムがユーザー 99 を返すシナリオをどのように回避するのですか。ユーザー 99 をいずれか 1 つだけに割り当てて、このシナリオから回復するにはどうすればよいですか。彼ら?
このようなマッチング システムを実装するために、Firebase の機能をどのように使用しますか?