思考(六十二):全服匹配服实现思路

全服匹配服实现思路

1. Redis 防止单键

假设有多个 key 参与匹配,比如等级( level )、战力( fightpoint )、段位( grade )

那么可以每类 key 分为 N 个,比如

key_level_1 到 key_level_N
key_fightpoint_1 到 key_fightpoint_N
key_grade_1 到 key_grade_N

要匹配的玩家随机 1 - N , 如 X ,然后插入到 key_level_X 、 key_fightpoint_X 、 key_grade_X

匹配时,乱序 key_xxx_1 到 key_xxx_N ,然后依次得到足够人数停止;或者取遍 N 人数不足

(深入, 匹配服主节点动态维护 N 值)

2. 匹配服无状态多开

按单服实现匹配,然后做改进,解决多开匹配服某个时间匹配数据冲突问题

比如,某个时刻,匹配服 A 与 匹配服 B 都匹配到玩家 C 的匹配数据冲突问题

匹配冲突解决可以直接实现在匹配服上,也可以独立成匹配仲裁服(可多开),思路如下:

扫描二维码关注公众号,回复: 11605984 查看本文章
  1. 依次对本次匹配的所有玩家 ID 做 INRC ,对返回值是 1 的,表示匹配到该玩家

  2. 依次对本次匹配的所有玩家 ID 做 INRC ,对返回值是大于 1 ,则有冲突,该玩家不可匹配

  3. 最后对这些玩家 ID 键做过期设置,比如随机 5 - 10 秒的某值

冲突率

实作中,应增加统计冲突率,了解多开匹配冲突的概率;以方便合理的作数值

猜你喜欢

转载自blog.csdn.net/u013272009/article/details/104402887