Cs专业分析系列之:网络通讯延迟

社区服务
高级搜索
猴岛论坛CSGO反恐精英Cs专业分析系列之:网络通讯延迟
发帖 回复
正序阅读 最近浏览的帖子最近浏览的版块
2个回复

Cs专业分析系列之:网络通讯延迟

楼层直达
guns100

ZxID:1019553

等级: 少尉
枪神
举报 只看楼主 使用道具 楼主   发表于: 2004-08-21 0
网络延迟问题

  正如前面提到的,延迟问题是一个影响通讯的主要问题。
  基本的问题是:服务器接受所有客户端的信息,以得知客户端正在做什么。服务器通过这些信息持续不断地更新cs世界的状态,并且通知所有的客户端关于这个世界的当前状态。
  那么,思考一个玩家按下了向前移动键。250毫秒以后,服务器接收到了这个信息。直到这个发生以前,移动并没有真的发生因为服务器不知道它已经发生了。一旦服务器知道了,它更新那个玩家的位置,并告诉其它的客户端这个玩家已经移动了。250毫秒之后,所有的其它的客户端接到了这个信息,并且最终在屏幕上看见了这个移动。
  当然,玩家实际上是在500毫秒之前作的这个动作,每一个玩家在屏幕上看见的,是所有的玩家在大约半秒钟以前的位置。这里有一个微妙的问题,但是必须要搞明白。在其他玩家正在做什么(500毫秒之前)和服务器知道什么(250毫秒之前)之间,有一个差别。
  当一个玩家瞄准并且射击另外一个玩家,真正有关系的是服务器知道的这个目标玩家的位置-不是目标玩家的客户端知道的位置,因为那个信息还没有到达服务器,那么服务器怎么会知道?因此,思考当一个玩家瞄准另外一个玩家并且开木仓的时候究竟发生了什么。他实际上是在瞄准那个玩家在500毫秒以前的位置-从目标玩家的视点来看,但是却是仅仅250毫秒以前的位置-从服务器的视点来看。 我们的玩家已经开木仓的信息,需要耗费250毫秒到达服务器。很明显,如果我们对这个延迟什么都不做,瞄准一个目标将变得非常困难。
  解决的办法相当灵巧。服务器保存一个玩家位置的最后大约半秒钟的历史数据。当玩家开木仓的信息到达服务器的时候,服务器知道这个信息用了多久才到达服务器(例如,241毫秒)并且也知道正被射击的玩家的大概延迟(例如,210毫秒),然后依据这两个延迟的长度的和来检索历史数据中的位置记录,以确定当我们的玩家开木仓的时候,目标是否正在准星之下。
  服务器正在做的事情,是描绘正在开木仓的玩家所看到的世界。如果这个玩家瞄准了目标,那么他就能够击中,甚至是世界在他开木仓之后已经产生了变化。在这种方式下,玩家能够瞄准他们的目标,而不需要手动调节。
  这也是为什么玩家有时候会在甚至已经跑进了拐角,脱离了对手的视线之后死亡。他们是在跑进拐角之前被击中的,但是服务器仅仅在一些时间之后,当那把杀了他们的木仓射击的信息到达服务器后,才能意识到他们死了,当然这需要一个附加的延迟,以便于服务器能通知客户端,这个玩家已经死了。客户端可以通知服务器,它们是不是希望使用这个历史位置信息(例如,它们是否希望能够直接瞄准目标,还是它们将要自己进行手动调节来抵消延迟)控制这个的命令是 cl_lc: 设置到1,那么客户端使用服务器的历史数据记录;为0则不使用。
CS酷酷

ZxID:1019241

等级: 大尉
爱POPING的我
举报 只看该作者 板凳   发表于: 2004-08-22 0
Cs专业分析系列之:网络通讯延迟
说得对~~~~~~~~快发原网址
cxmsds

ZxID:1015945

等级: 少尉
玫瑰刀兵
举报 只看该作者 沙发   发表于: 2004-08-21 0
老哥,你能不能把这些东西的原网址给我们我们自己去看?怎么那么小气
« 返回列表
发帖 回复