首先,在A和B中发生一个操作,这个操作被发送到服务器。此时,服务器不会立即发送A和B的操作,而是会记录A和B的操作,直到100 ms才向A和B发送操作。也就是说,在100ms中,A和B的运算是在现实世界中,谁先来其实并不重要。真正决定顺序的可能和服务器算法有关。比如B在第50 ms对A造成999伤害,A在第100ms对B造成999伤害,但是因为服务器在100ms的同步帧中先处理了A的数据,所以在现实世界中B先出手,然而还是判断A先伤害了B。
当然更有可能是A和B同时伤害对方,导致‘同归于尽’的结果。这种方法有很多优点。首先是可以很大程度上避免网络抖动的问题,让游戏更流畅。第二是可以减轻带宽的负担,保持所有玩家收到的操作信息一致,最终保持游戏世界同步。
大部分情况下游戏同步时间在60-100ms左右,比赛服同步时间可能低至30-60 ms,那是不是说十几毫秒的延迟都是心理上的,没有影响?
其实还不是全部。看下面这个特例。A和B同时执行一个操作,但是A的延迟比B少5ms。
这会导致一种情况。A,在服务器看来,操作A发生在200ms,而B因为延时只能数到后面的操作帧,也就是300ms。即使实际网络延迟是5ms,但实际上造成了100ms的游戏延迟。但是,一般来说,最后的情况发生的次数多是概率问题。在实际游戏情况下,最终的情况可能会发生,但不会太多,因为游戏包的冗余发送机制。