ue4 网络的最佳实践

关于性能的一般最佳实践

通常,通过网络发送的数据越少,性能越好。为了保持较低的网络开销,请考虑以下做法

  • 最大程度地减少Actor和属性的复制次数

  • 如果Actor不用经常更改,请降低它的NetUpdateFrequency

  • 尽可能降低Net剔除距离,以便减少远距离Actor的更新次数

  • 如果Actor的一部分属性需要频繁复制,而其他属性很少更新,可考虑将该Actor分为多个Actor,把频繁更新的属性绑定在一个Actor上,把不需要频繁更新的属性绑在另一个Actor

  • 当你在编写代码功能时,只有在绝对必要时才考虑使用可靠RPC调用

  • 考虑使用第三方服务,例如Oodle,它能将带宽提升20-30%,但需要购买许可证

  • 避免在复制的Actor上使用子Actor组件,因为它们往往存在同步问题

  • 要注意权威性

    • 在更改复制属性时,请确保只在拥有对象权威的那一侧的改动,以便确保工作不会被覆盖或浪费。

    • 仅在拥有权威的那一侧生成对象

  • 复制图表对于大量的复制Actor来说很有帮助,但对于少量复制则帮助很小

延迟补偿

采用“攻方有利”有利原则时,以下技巧可以帮助减少延迟的影响:

  • 通常,可以在客户端处理碰撞测试,以便节省服务器计算量

  • 服务器应对结果进行一些简单的验证(检查范围和角色位置等)

  • 建议使用第三方反作弊解决方案,有助于最大程度减少客户端漏洞

  • 客户端可以生成一个预测用发射物,直至从服务器复制的发射物到达为止

更新频率 

默认情况下,Actor会根据它们的复制频率被频繁复制。对于不需要经常更新的Actor,有几种方法可以控制复制速率,每种方法都各有利弊。应根据具体情况使用网络分析器找到最佳解决方案。

将NetUpdateFrequency设置为0:最适用于更新不频繁,但高到仍需保持更新渠道畅通的Actor。

  • 不发送自动更新,仅通过“强制网络更新”(Force Net Update)手动更新,这样可以节省网络流量

  • 更新渠道仍然开放,因此之后的手动更新不会产生额外开销

  • Actor保留在复制Actor池中,因此必须经常检查复制情况

将Actor标记为休眠:最适用于以后可能会再次更新但更新频率非常低的Actor。

  • 休眠系统将关闭Actor的更新渠道,将其从复制池中删除,并保留在单独的休眠池中

  • 可以在将Actor标记为休眠之后再发送更新消息,但这会产生额外开销,因此应尽量少用

  • 单个更新可以通过“清空网络休眠”(Flush Net Dormancy)发送

对Actor调用TearOff():最适合在Actor不再需要复制时使用

  • 将Actor从复制池中完全删除

  • 无法再次轻松复制,不应该在Actor可能再次更新时使用

  • 通常用于客户端模拟布娃娃效果

RepNotify对比Multicast

RepNotify具有一些优点,使它在大多数情况下都是最优选。 

  • RepNotify支持进程中加入

  • 组播(Multicast)中的RPC调用不会发送给新连接,这意味着它们不支持进程中加入(join-in-progress)

  • RepNotify通过使用增量状态压缩发送少量数据

网络测试技巧

  • 在专用服务器模式下使用在编辑器中播放进行测试,以便更好地呈现生产环境

  • 利用新的内置网络模拟设置,确保你不是专门针对完美的网络条件进行测试

猜你喜欢

转载自blog.csdn.net/zhangxiaofan666/article/details/113089871