Notifications
Article
Photon Server之Performance Tips性能
Published 8 months ago
205
0
服务器性能是大型多人网络实时在线游戏最重要的部分。Photon server组件将流畅无缝集成到您的应用程序中,帮助你快速开发。 本文汇总了一些在使用Photon开发时应该注意的提示列表。

如果您正在运行本地Photon Server并注意到错误的事件率,那么这很可能是由日志记录引起的。 例如,我们注意到启用Photon Server日志记录和Windows Defender可能会导致事件速率显着降低。 建议在启用Photon日志记录时禁用所有病毒扫描程序和防火墙,以便您可以获得预期的事件率。 停止登录Photon Servers后,您可以启用病毒扫描程序和防火墙。
Call Service Regularly
客户端库依赖于对LoadBalancingPeer.Service的常规调用,以便与服务器保持连接。服务调用之间的较大暂停可能导致超时断开,因为客户端无法保持连接。
加载数据是一种常见情况,在主循环中每秒执行的更新次数较少。确保在加载时调用服务,否则连接可能会受到影响并被关闭。如果被忽视,这个问题很难识别和重现。
更新与流量
每秒增加更新次数使游戏更加流畅和最新。另一方面,流量可能会急剧增加。注意,您调用的每个操作都可能为其他玩家创建事件。
在移动客户端上,每秒4到6次操作就可以了。在某些情况下,甚至3G设备也使用相当慢的网络实现。请记住,每秒发送更少的更新实际上可能更快。
基于PC的客户可以提高。目标帧速率应该是客户端做出的限制。
优化流量
您通常可以减少发送以避免流量问题。这样做有很多不同的方法:
不要发送超过需要的东西
只发送交换必要的数据东西。仅发送相关值并尽可能地从中获取。根据上下文优化您发送的内容。试着考虑你发送的内容和频率。非关键数据应根据同步的数据在接收端重新计算,或者与游戏中发生的事件重新计算,而不是强制通过同步。
例子:
•在RTS应用中,您可以在发生时为一堆单元发送“订单”。这比每秒十次发送每个单位的位置,旋转和速度要精简得多。例如:1500名弓箭手。
•在射击游戏中,将射击作为位置和方向发送。子弹通常以直线飞行,因此您不必每100毫秒发送一次个人位置。你可以在它击中任何东西时或在它经过“那么多”单位之后清理子弹。
•不要发送动画。通常,您可以从输入和玩家所做的动作中获取所有动画。被发送的动画很有可能被延迟而且播放得太晚通常看起来很尴尬。
•使用增量压缩。自上次发送以来,只发送更改后的值。使用数据插值来平滑接收端的值。它比直接同步更好,可以节省流量。
不要发送太多
优化交换的类型和数据结构。
例子:
•对于小整数使用字节而不是整数,尽可能使用整数而不是浮点数。
•避免不惜一切代价交换字符串,而是更喜欢枚举/字节。
•避免交换自定义类型,除非您完全确定要发送的内容。
使用其他服务下载静态或更大的数据(例如地图)。 Photon不是作为内容传送系统构建的。使用基于HTTP的内容系统通常更便宜,更容易维护。任何大于最大传输单元(MTU)的东西都将被分段并作为多个可靠的包发送(它们必须到达以再次组装完整的消息)。
不要经常发送
•降低发送速率,如果可能,应低于10。这当然取决于你的游戏玩法。这对流量有重大影响。您还可以根据用户的活动或交换的数据使用自适应或动态发送速率,这也有很大帮助。
•尽可能发送不可靠。如果您必须尽快发送另一个更新,则在大多数情况下您可以使用不可靠的消息。不可靠的消息永远不会导致重复。示例:在FPS中,玩家位置通常可以发送不可靠。
接收端数据
与“流量”主题相关的是仅产生可在接收端消耗的数据量的问题。如果性能或帧速率跟不上传入的事件,则它们在执行之前就已过时。
在最坏的情况下,一方产生如此多的数据,以至于它打破了接收端。开发时要密切关注客户的队列长度。
限制执行不可靠的命令
即使客户端暂时不调度传入消息(例如在加载时),它仍将接收并缓冲所有内容。根据其他玩家的活动,客户可能有很多东西要赶上。
为了保持精益,客户端会自动将不可靠的消息剪切到一定长度。我们的想法是,您可以更快地获得最新信息,并且很快就会有新的,最新的消息替换丢失的更新。
此限制是通过LoadbalancingPeer.LimitOfUnreliableCommands设置的,默认值为20(在PUN中也是如此)。
数据报大小
在所有设备上运行的数据报的内容大小限制为1200字节。
1200字节包括标题的所有开销,大小和类型信息,以便实际纯数字。

Tags:
UUG山东
13
Comments