帧同步

  1. 帧同步
    1. 帧锁定同步
    2. 乐观帧锁定
      1. 回放-采用操作2
      2. 逻辑帧同步
  2. 可靠UDP
  3. 小断线重连
  4. 大断线重连

参考内容 http://www.skywind.me/blog/archives/131

帧同步

向服务器发送操作时可以选择使用位图的方式发送。如使用int32_t类型 来表示最多32个按键的状态。

帧锁定同步

帧锁定同步会使用逻辑帧的概念来收集玩家操作,然后向服务发送。

乐观帧锁定

乐观帧锁定在玩家按下操作键后就会立即向服务器发送本次操作。

服务器本身含有游戏循环,每个逻辑帧会将本逻辑帧内收集到的操作发送给客户端。发送的时候会带上逻辑帧的标号。

客户端收到服务器发送的操作后,目前看到了两种执行方式。

  1. 使用回调等方式,直接将数据包中的操作作用到玩家上。此时不能追帧?, 而且回放也做不了
  2. 将所有操作收集起来,根据逻辑帧信息进行作用。此时如果逻辑帧落后则进行追帧操作。

回放-采用操作2

服务器每次下发时是以逻辑帧为单位,客户端取数据包时同样以逻辑帧为单位。

回放时,服务器一次性下发所有保存的 带服务器逻辑帧编号 的数据包。
客户端取数据包执行时,只会取服务器逻辑帧编号小于等于当前本地逻辑帧编号的数据包。

逻辑帧同步

所有客户端和服务器同步逻辑帧的编号,使用PING包计算本地和服务器之间的延迟T。

当服务器下发逻辑帧开始命令后,使用本地的时间减去 0.5T 即为真正的开始时间。

可靠UDP

小断线重连

只有当收到下一帧的数据包时才消耗本帧的数据包

如果直接消耗本帧的数据包,发生断网时如果本帧含有多个数据包。恢复时还需要额外的带上其他标记,不利于请求以后的数据包。如果收到下一帧时才消耗,恢复时只需要请求接下来的数据包即可。

大断线重连