网络同步

网络同步

1、奇怪的不一致,UDP分组长度的确定:UDP包大小限制 。

  运营过程中,发现有部分玩家,经常出现游戏不一致异常结束。日志中发现,玩家的Frame包校验码不正确,就是说这个包是错的。这怎么可能呢?网上都说UDP保证包数据的正确,看来也不尽然。

  后来咨询了各种资料,总结出问题: 是数据报太大,被分组,部分路由器组包错误。(最大可能)

  我们不断缩小分组长度: 1400 – 1200 – 1000 – 576 byte。最终我们定在了internet标准MTU尺寸576 byte(包含IP包头和UDP包头)。这个问题就基本搞定了。

2、通过冗余加快处理速度。

扫描二维码关注公众号,回复: 1567972 查看本文章

  丢包重发后延迟怎么办?

  这是丢包重发的后遗症, 1次重发,会增加较大的延迟,至少是100ms + 2帧时间 + 一个ping时间。

   如果收到Frame 3时, 同时携带Frame 2, 那么即使之前的Frame 2即使丢了,也不需要重传,就可立刻补充——这就是冗余方案。

  

  冗余是通过流量换速度。

  做一套动态冗余算法,包含上行逻辑和下行逻辑,通过每个客户端的丢包状况来动态调整冗余倍数。

  也有一些游戏,通过全冗余来做,就是在客户端还没收到ACK时,总是携带所有没有ACK的数据。

  这种方式简单粗暴,但是会导致流量增长N倍,各有利弊。

  

  (下行冗余的倍率图,平均在1.4倍左右。还是比较理想的。(图中纵轴10000表示无冗余))

  

3、

4、

5、

猜你喜欢

转载自www.cnblogs.com/tekkaman/p/9171684.html