1. Client A
  2. Server
  3. Client B
  4. ...
  5. ...
  6. ...
  7. RULE
  8. move
  9. adjust
  10. client A move
  11. at the same time
  12. How
    1. 模拟包未到达时下一个周期的状态
    2. 根据通信往时间估算需要模拟的时间
    3. 包到达后, 通过加快或者减慢动作, 或者使动作连贯来修正误差
  13. 使用自适应的传输delay来划分周期.
  14. Lockstep
    1. 其中一个客户端作为服务器
      1. 避免广播消息让通信量暴增
      2. 服务器负责决断整个游戏状态.
    2. 方式
      1. 事件锁定
        1. 选择事件
        2. 事件包
          1. 时间点
          2. 时间点对应的状态
        3. Transport Protocol
          1. TCP
          2. 速度慢于UDP
          3. 可靠的保障
          4. UDP
          5. 很快的速度
          6. 自己保证正确性
          7. 丢包
          8. 时间顺序
        4. 时间同步
          1. ball move to P at time T
          2. SNTP/NTP
          3. 高阶消除
          4. 时间请求包加上本地时间 (sentTime)
          5. 服务器收到后加上自己时间(currentTime), 返回原包
          6. 计算 delta = (currentTime - sentTime) / 2
          7. 第一个收到的包用来立即同步时间
          8. 重复1到3步
          9. 存储每个delta
          10. 大于序列中值1.5倍的数值抛弃, 剩下的取算术平均值
      2. 帧锁定
        1. waiting for the frame update information
        2. 更新速度只取决于最慢的那台客户端
        3. Age of Empires: 对等用户架构. 自适应通信往返时间.
          1. turns were separated in AoE from actual rendering frames
    3. details
      1. 周期间插值
        1. 划分周期
        2. 更小的周期得到更精确的动作, 但是通信量更大
      2. 隐藏延迟
      3. 主机迁移
        1. 当主机退出时如何迁移到另外一台机器
        2. AI接管
      4. 速度慢的机器发特定包, 告诉服务器需要调整速度
      5. Out of sync
        1. 直接修改游戏状态, 而不是通过统一的接口
        2. 修改非己方Player数据
        3. 使用本机时钟, 而不是统一周期
        4. 游戏版本不同
        5. 引用对象的改变
    4. testSuite
      1. 计算所需要的包大小
        1. 操作统计
        2. Objects统计
      2. 模拟延迟
  15. Other protocol
    1. 对等用户
    2. c/s
  16. hints
    1. 在编写单机的时候考虑到多人游戏
    2. 了解用户, 然后统计操作习惯以及感受用于优化
    3. 尽可能早的实际测量网络性能