伴随移动互联网的普及,手机游戏也从单机时代,进入到多人互动的联机时代,并在实时语音、全球同服等核心技术上不断创新。作为游戏开发者,如何拥抱手机游戏技术创新,同时解决开发遇到的技术瓶颈呢?
为此,腾讯云云端技术课堂,为开发者搭建了一个学习与交流平台,并通过「游戏开发的超“音”“速”」主题沙龙,解答了众多开发者在多人联机交互、语音分析和跨域网络访问等技术上的疑问。
作为开发者,要想快速让开发的游戏具备联机能力,实现在不同客户端之间同步游戏的逻辑。帧同步和状态同步,是基本的实现方式。
对于帧同步游戏而言,服务端会不断收集客户端发过来的指令,将一段时间之内的所有指令组成一个帧广播给客户端,且相同序号的帧完全一样。因此客户端要实现同步,必须做到相同的输入和相同的时间间隔,才能保证游戏状态一致,这也是帧同步游戏关键的一个点。
状态同步相对会简单一点,每个客户端发一个指令给服务器,服务器会统一计算出游戏状态,广播给每个客户端,每个客户端拿到广播之后直接更新游戏画面,不需再做些额外的逻辑计算。概括来说,做一款联机游戏要做两件事:一是要找到对手,把玩家组织在一起;二是解决玩家和玩家之间的网络通信。
不过,不管是帧同步还是状态同步,开发者要想自己实现部署和运维组队、消息发送、广播的后端逻辑,却是繁琐和复杂的事情。
为了帮助开发者快速搭建多人交互小游戏,腾讯云开发出小游戏联机对战引擎,将游戏对战场景中用到的核心组件提取出来,来解决在线匹配和网络通信。
在线匹配:通过 json 配置完成在线匹配功能,独创的分段算法和误差算法,涵盖了大部分游戏玩家匹配场景,开发者只需根据规则配置一个 json,就可实现复杂的匹配功能。
网络通信 - 帧同步:调用开始帧同步、发送帧消息、接收帧消息、结束帧同步 4 个接口即可实现复杂的帧同步。
网络通信 - 状态同步:调用 sendToServer、下载框架并填写业务逻辑,发布后即可实现状态同步。
游戏对战逻辑部署在服务器上,是一个有状态的部署,并有以下这两个要求:
玩家能重回游戏服务器的断线重连,需重回之前链接的服务器;
同一对局的玩家要导航到同一台服务器上进行计算。
所以传统的弹性伸缩、负载均衡在这个场景下是无用的。且传统游戏通常只扩容不缩容,需提前准备很多服务器,所以增加了开发者的服务器支出成本。
小游戏联机对战引擎的实时服务器,使用了容器技术,当玩家组成一个对局玩游戏的时候消耗资源,不玩游戏的时候便不消耗资源,可以秒级进行资源分配和释放。开发者不需要购买服务器和运维,只需要在页面上下载一个框架,并填写业务逻辑即可,节省 80% 以上的成本,同时也节省了开发者的研发时间。
随着越来越多的中国企业出海、外资企业入华开展业务,网络性能的要求也越来越多样化,尤其是对游戏行业,网络的性能更成为限制发展的瓶颈。
针对网络问题,腾讯云依赖在全球 25 个可用区的 52 个节点部署、转发集群及智能路由技术,打造了全球应用加速(GAAP),实现各地用户的就近接入并通过高速通道直达源站区域,帮助业务优化全球用户的网络访问延迟过高、卡顿等问题。
GAAP 将数据从终端出发到服务器的整条链路分成接入段和传输段。接入段主要是无线优化和就近接入,利用合作运营商分配的优质无线资源进行数据承载,用户数据从终端出来可快速进入加速网络中。
无线优化、就近接入传输段主要有专线传输、路由优化、反向代理、协议优化四个方面。专线传输就是通过专线进行加速传输;路由优化是通过规划一个路径,防止自由跳转;协议主要是控制算法的优化;最后一个反向代理是针对场景的。
智能路由、反向代理
当客户端和服务器距离特别长的时间,建立连接所消化的时间就特别大。在采用短链接形式的网站类应用上,需要不断的建立连接,消耗的时间就会越来越多。因此,在入口部署反向代理服务,能够将这种 http 的连接尽可能快的终止在接入点,客户端只需和反向代理服务进行握手,不需要到服务器上。
另外,反向代理和服务系之间还建立起了长连接池,有请求的时候,就会从长连接池里选择一个空闲的连接进行数据的承载。GAAP 还可进行全局节点之间实时探测,通过延迟、丢包、链路负载、抖动率等参数动态更新路由转发路径,在提供高冗余性的同时,可确保数据实时的最优路径选择。
游戏语音的处理有特定的门槛,除了采集、处理、编码、传输、解码、渲染等各个环节本身需要的技术能力和经验之外,还需要很强的工程实力:例如解决几千种机型的适配和音频兼容性问题;海量高并发的处理能力等。
面对以上这些问题,腾讯云在服务数个亿万用户量级产品的过程中已经积累了很多经验,并开发出 GME,来解决游戏开发过程中遇到的语音技术难题。
GME 基础能力结构,现在支持 7 大平台、3 大引擎,并且三个引擎相互交叉支持这些平台。从客户端架构图可以看出,在引擎层支持 Unity、Cocos、Unreal,同时支持用户自己的引擎,来方便用户使用;接口层主要是方便用户接入;之后是平台层;平台之后是接入层,将上面的接口都导到接入层,并保证接口统一,实现跨平台;最后是协议层与终端层。
GME 针对游戏场景的音频编解码器进行深度优化在码率 、 延时 、 系统资源消耗等关键技术指标达到技术优势:
低时延:主要提现在实时语音音质,在网络无损的场景下的平均 MOS 分达到 4.38(满分 5 分),平均延时低于 200ms;
高抗性:通过先进的丢包恢复技术、丢包补偿算法以及优秀的网络抗性,即使在 50% 以上丢包、1000ms 的网络抖动下,也能保持顺畅的沟通和很好的音质;
资源消耗低:例如 MOBA 类游戏中,在保证正常的语音沟通和良好性能前提下,移动网络模式每分钟流量消耗低于 500KB,CPU 占用率平均在 10% 以下等。
服务器接入的优化主要分为两部分:第一个部署服务器;第二个是网络大范围承载,密集性的 UDT 协议或者 UDD 协议。
客户端通过信令层找到位置最近的服务器,再通过专有的数据层,进行一次专码,转到合适的码,就可以实现全世界互通。达到快速响应并且稳定灵活的多层次调度需求。
此外,GME 后台灵活多层次的调度可支持:
亿级用户在线,亿级群数规模;
实时监控,异地容灾,智能调度,保证服务安全可靠;
专业网络接入:复用 QQ 接入部署和调度策略,有效解决弱网络环境下的连通问题,连通率高达 99.995% ;
超强服务承载:承载 QQ 服务支撑能力,支持亿级用户在线,亿级群数规模;
实时监控,异地容灾,智能调度,保证服务安全可靠。
点个在看少个 bug 👇