帧同步 java_游戏同步方案——帧锁定同步

本文探讨了帧同步,特别是帧锁定同步在游戏同步方案中的应用,主要以火影手游为例。介绍了服务器如何每66ms收集指令并下发帧,以及帧丢失时的重传机制。还提到了乐观锁的概念,防止网络卡顿时导致所有客户端等待。同时,文章讨论了不同步处理、gamecore的设计及其在反作弊中的作用,强调gamecore在保证状态同步和高效性方面的重要性。
摘要由CSDN通过智能技术生成

最近毕设准备做一个关注游戏同步方案的 demo,准备选用帧同步。正巧所在组火影手游绝大部分的玩法都是使用帧锁定同步来做的,所以在这记录一下。

概述

帧同步,或者更详细的说是帧锁定同步,是将前端的表现划分为每秒n次的逻辑关键帧,客户端的表现根据关键帧完成展示。客户端将指令经由或者不经由服务器广播到所有相关的客户端上,相邻的指令将会被封装为帧并被客户端理解执行。所有元素在某一时刻的状态,都是由各个客户端独立计算出来的。

帧同步方案

这里我们讨论cs架构下的帧同步方案。

下图反应了火影手游pvp玩法中的同步逻辑。

a22be36b98a780610f1e23eaf9536369.png

可以看到,服务器端每 66ms 会将接收到的所有客户端指令封装成帧并下发到各客户端中。如果某个帧在传输中丢失了,将会随下一帧重传。同时,使用 seq 和 ack 对每个帧进行确认。如果 99ms 内客户端还没有收到包含自己已发出指令的帧,就要将丢失的指令重传。

无论是客户端发送的 action,还是服务器端的 frame,都要有确认重传机制。frame 的确认就是通过客户端附带的 ack 字段来确认。

乐观锁

标准的帧同步,是要求客户端定时发送指令,服务器必须等待收集到所有客户端的包之后再下发,这个等待帧信息的过程称为帧锁定。如果一个客户端网络卡顿,那么所有客户端都要等待这个客户端的帧同步信息。

乐观锁就是无论是否收集到客户端的信息,都将目前为止收集到的指令封装

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值