【网络游戏同步理论】学习记录(二)(物理同步、常见网络同步优化)


学习原文:《网络同步在游戏历史中的发展变化》作者: Jerish

承接上文,文章里还介绍了虚幻和守望先锋如何处理同步问题,因为没有设计具体的理论知识,所以就没有记录了。有兴趣的自己看原文。

物理同步

  • 概念 在较为复杂的物理环境或者有物理引擎参与计算的游戏内,对持有物理信息的对象进行同步。
  • 难点 1、物理引擎的不确定性 2、物理引擎参与模拟,网络同步微笑的误差将会被迅速放大。
  1. 物理引擎的不确定性 因为不同平台、编译器、优化版本都会影响确定性,主要是编译器优化后指令的执行顺序,约束计算的顺序,不同平台和版本浮点数精度问题。
  2. 误差放大 首先本地客户端控制对象肯定是快于远端客户端的控制对象,还有就是关闭物理模拟的时机


TCP存在的问题

  1. TCP有个Nagle算法会积攒小包,然后再发送,这会影响游戏实时性,可以通过TCP_NODELAY设置。
  2. TCP一旦发送丢包和乱序,这时只能等待这个丢失的包收到才会传输给上层,这时可能出现超时重传。
  3. TCP的拥塞控制和流量控制将会不可控,在网络环境较差的时MSS(最大分段大小)将会降低一半,TCP的接收窗口将会限制发送端发送数据。
  4. TCP报头占用字节等等

常见同步优化

表现层(弱化客户端对延迟的感受)
  • 插值优化、客户端预先执行+回滚
延迟对抗(弱化客户端对延迟的感受)
  • 延迟补偿、命令缓冲区、通过实现技巧,例如前摇时间(比如客户端扔手雷播放投掷动画并向服务端发送消息,服务端接收后直接生成手雷而不去播放动画)。
丢包对抗(弱化客户端对延迟的感受)
  • 使用TCP而不是UDP、冗余UDP包(一次性发送多帧数据,UDP容易丢包,多发几个只要到一个就可以获得完整数据)
带宽优化(减少延迟)
  • 同步对象裁剪,剔除不相干的同步对象,常用的有SOI(势力范围)静态区域(将场景分为N块,不在就剔除)视锥体裁剪八叉树裁剪、还有AOI(维护一个动态视野,视野外进行剔除)
  • 分区、分房间 不同区域由不同服务器接管
  • 数据的压缩和裁剪 然后对于状态同步可以采用曾量同步(只同步变化状态)。
  • 减少遍历
帧率优化(减少延迟)
  • 提升帧率 GC、IO、低效率遍历循环、Drawcall等等
  • 帧率的稳定
  • 计算压力的分担 将服务端计算压力分担到客户端

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值