我正在实施一个社交国际象棋游戏。每个用户都可以创建一个新游戏,他们会等到系统为他们找到对手。
当用户创建游戏时,他们会指定约束:他们想玩的颜色,以及对手的最低国际象棋等级。
对手可以匹配也可以不匹配。例如,以下两个对手将匹配:
// 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 匹配。
另一方面,下面的两个对手不会匹配,因为他们都想打白。在这种情况下,两者都应该等到其他人使用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 分配给其中一个他们?
您将如何使用 Firebase 的强大功能来实现这样的匹配系统?