前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >网络同步(帧同步)

网络同步(帧同步)

作者头像
渴望飞翔的猪
发布2022-07-17 10:50:57
1.5K0
发布2022-07-17 10:50:57
举报
文章被收录于专栏:葵花宝典007

帧同步小记

刚问了公司另一个写服务器的大牛,赶紧记录下。 首先我们的游戏是强联网的格斗游戏。网络同步采用是帧同步技术。

帧同步的背景介绍:就是一个对于一个f(x) 函数,对于同一输入,输出结果一定相同。

拿格斗游戏举例,a挥刀,b下蹲作为输入的参数,x1,x2 ,函数f(x1,x2) 输出固定的一个结果(相对俩个对战玩家来说,叫同一个输出结果这样才比较好理解吧)

原来经常说的30帧意思就是,一秒30帧,拿1000ms /30 = 33ms 作为区间计算。

依然接上个例子,服务器从某0时刻算起,到33ms 算第一帧 ,这个区间中间a玩家上传的挥刀 ,b玩家上传下蹲,服务器收到之后,在33ms这个点上就同步信息给玩家(这里所谓的同步具体代码层度上就是广播信息给玩家啦),若是在这个区间a没有上传值,则服务器会取默认值下发同步,即俩者都不发也会取默认值同步。

这里就有个问题,比如某个人不发了,是不是算他掉线了,所以就牵扯到一个功能区分粒度的问题了。也就是说一般合格的程序员都应该把控的问题,某个函数是做什么的,功能只是做这个。上面说的这些就是帧同步核心的思想玩法,听完也没那么神秘的。回到这里的问题,就是指这个模块(或者说是函数),只负责这个帧同步消息的操作。至于我说的比如玩家socket断线什么的,可以是另外的一个模块(函数)负责的,包括玩家实例的回收,生命周期什么的,这样分开管理好处应该很容易想到,分工明确,作为他人也比较容易看懂,有条理,好找bug(这点很重要,不然像我自己之前做的一个分的细度不明确,后面代码量多了后,出bug自己都看的蛋疼)。 而且这也是一个有经验,专业的程序员和那些在学校没有啥项目经验的学生区别吧。

另外还有延迟的考虑,就是客户端一般收到的帧会有俩帧的延迟,作为服务器是收集输入信息到点就下发同步的。但是事情情况来讲,比如你在广州,我在深圳,那网络中间路由传输就有70ms的时间,所以作为客户端来说,在当前时刻上报的输入帧,会等到俩帧之后才收到结果(这个就是所说的俩帧延迟,我一开始还理解成服务器延迟俩帧下),不过在服务器有考虑过延迟几帧再下方的操作,是因为考虑了网络波动,这样客户端就能多缓存几帧的内容,不过后来实际效果不好,被pass了,听了这么多,我才算理解了,为啥我们那游戏在国外的玩家打斗操作动作那么卡啦,这不就是下发的帧延迟太久导致的嘛。

好了,刚刚想到问的这些,也是提醒自己,遇到第一次听到的,以前没见过,听过的东西,一定要记录下来,不要相信自己当时脑子的记忆。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-02-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 帧同步小记
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档