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

本文探讨了全服匹配服的实现思路,包括使用Redis防止单键冲突,通过将不同类别键分为多个子键来随机分配玩家。同时,提出匹配服无状态多开的方案,并详细阐述了如何解决多开时的匹配数据冲突问题,通过INRC操作判断玩家匹配冲突,并设置过期时间。最后强调了统计冲突率的重要性,以便优化匹配系统的性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

全服匹配服实现思路

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 的匹配数据冲突问题

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

  1. 依次对本次匹配的所有玩家 ID 做 INRC ,对返回值是 1 的,表示匹配到该玩家

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

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

冲突率

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fananchong2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值