在此前的《网络接入篇》中我们介绍了实时联网游戏网络接入相关内容,网络接入层开发考验的是开发者高性能网络编程的功底,即解决C10K甚至C10M的能力。本文开始介绍游戏逻辑层,由于不同游戏玩法千奇百怪,本文不涉及游戏具体的业务逻辑,只探讨在逻辑层实现中经常遇到的房间匹配和数据同步问题。
基于“房间”模式的联网对战游戏,游戏流程可分为匹配(matchmaking)和 对战(gameplay)两个阶段。匹配是指将在线”玩家中满足一定条件或要求的玩家“撮合”到一起进行游戏。对战是指匹配到同一房间的客户端(玩家)彼此建立通讯信道(一般是通过连接到指定房间服务器,并通过房间服务提供的接口)来同步玩家操作、游戏状态等数据以支持同一房间内玩家对战和互动。
房间匹配
一般来说房间匹配服务架构如下图所示,其中和房间匹配相关的通讯数据称之为“控制流”,房间内游戏对战通讯数据称之为“数据流”,显然两种不同类型的流对带宽、延时等指标容忍度不同,实际开发中应分别由不同服务器来承担。
不同游戏的匹配策略可能不太一致,例如常见的基于场次、基于等级、随机匹配等。如果在房间创建时给房间打上一定数量的标签,我们便可以借鉴搜索引擎的倒排索引的思路来实现房间匹配算法。例如待加入的房间有:R1: [T1,T2,T3],R2:[T3],R3:[T1,T3],Rn:[T1,T2],这些房间不仅会存在与全局匹配列表中&