CS1.6服务器网络参数详解(如何当好一个合格的OP)
记得我在网上见到一篇文章,内容是有一个站队的队员讲述了上海地区举行的一个大型比赛,因为OP设置了不合理的网络参数,导致他们比赛发挥失常,原文的链接我出差回家后找找看,反正他说的还是很道理的,并不是找借口。所以引起我对服务器网络参数的重视和学习,后来经过我长时间在自己建立服务器中打比赛后,现将一些心得和基础知识给大家介绍一下,让你当好一个合格的OP,以免在网络参数设置不规范的服务器中长久练习后,待参加正规的大型比赛(比如CPL、ESWC等)时,因为不适应而发挥失常。
下面我引用一篇比较经典的文章,希望你能认真的学习:
原文作者: Jon Mellin
-----------------------------------------------------------------------------------------------
在这篇文章中,我希望能让大家了解一下CS中的一些网络上的参数。在1.3时代,当欧洲和美洲的玩家在CS上强烈碰撞的时候,网络参数在当时是一个全新的主题。1.5里,玩家们开始尝试从这些命令当中研究,发掘某些特性。事实上,大多数人都采用了正确的设置。当我们都以为对于网络参数的争论结束的时候,一个看似神秘的参数ex_interp在1.5中被重新提出,引起了一系列的风波。然而,在1.6出现之后,Valve修正了网络参数的这个错误(指的是ex_interp),同时也制造了更多的混淆。如果没有混乱的话,正确的设定早已经有效的被Valve反作弊系统(VAC)所锁定.到了现在,却仍然是一个混乱的局面。
在文章中,我的观点是积累了2年的经验和长期观察的结果。最近,一些参数的问题又引发了我的兴趣:管理员强制性地设置了错误的数值,玩家们在LAN中使用正确的参数却被硬性地踢出等等。有些人可能会记得我,我就是当年发表那篇"ex_ cammands explained(ex_ 系列参数详解)"的人。在这篇文章中,有很多信息是我与Valve的员工用Email交流之后获得的。(大家可能会奇怪,他们正在解决一些demo的问题。)我想再次提出,文章不会让你成为下一个SpawN,不过能帮助消除一些错误的监控(译者注:主要指管理员和一些软件的监控错误)并让大家有一个更具说服力更具准确度的游戏环境的理解。
下文中,我将首先说明一些个人认为重要的命令的大体介绍,并带出他们的实际功效。然后我将会推荐一些数值,并解释其中的原因。
------------------------------------------------------------------------------------------------
首先说明:
sv_ 以及sys_ 系列参数,是服务器端的命令,如果是在非本地服务器上修改这些系列参数的命令,你需要获得服务器管理员的权限、
ex_interp和cl_updaterate的关系是非常紧密的,这两个参数的说明都请必须阅读。
文章中假设玩家的网络都在宽带接入的方式下进行。
------------------------------------------------------------------------------------------------
参数介绍:
cl_cmdrate:
这个命令决定了客户端向每秒钟服务端发送数据包的数量。很明显地,这个参数的数值设定得越高,那么服务器就能相应客户端处理信息的速度越快,基本上数值设定得高是没什么错的。如果你与你的朋友都在局域网中游戏,而延时非常严重,那么很可能就是这个参数没有设置好。事实上,大多数的宽带接入没有提供足量的上行带宽,这也恰好是这个命令需要的。
cl_updaterate:
cl_updaterate与cl_cmdrate是类似的,不过方向是相反的。它控制的是客户端每秒钟从服务端接收数据包的数量。因此,它和你的下行带宽是紧密相连的。cl_updaterate的数值设定得越高,你和服务器的同步率就越高。因为只有服务器才会决定你开木仓是否命中,所以你需要足够的更新数据包(upadates)。
sv_maxupdaterate:
cl_updaterate控制客户端每秒接收来自服务端的数据更新包数量(只对客户端本身控制),而sv_maxupdaterate就指定了服务端每秒发送多少数据包到客户端上(对服务端进行控制)。因此,客户端cl_updaterate的数值设定比服务端sv_maxupdaterate的数值要高,是不能增加客户端接受的更新数据包数量的。
sys_ticrate:
这个命令设定了服务器每秒能处理的最大数据“帧”数。默认设定下,这个参数设置为100。为什么服务器的fps那么重要?这个参数决定了服务器的感应能力。我敢肯定我们都觉得服务器好像在TI-83 Plus(图形计算器)上工作一样,而我们就是在LAN上进行这些图形计算器的处理。
sys_ticrate只是指定你的服务器所能计算的最大fps。默认设定下,服务器不会达到你所设定的数值,因为运算系统可能在处理某些其他的进程。市面上有不同的加速("boost")服务器fps的软件,不过大多数(如果不是全部的话)服务器加速软件是靠网络服务器供应商处理的,记住,这样的加速会加重服务器CPU的负荷。(出于某些原因,在de_inferno和de_aztec上用服务器加速软件的话,会剧烈增加CPU的负荷,大家可能曾经有过这样的体验。)在默认设置下,Half-life服务器,基于Win32的服务器一般在64fps,而基于Linux的服务器一般在50fps。如果使用加速软件的话,可能可以提升到512fps或者更高。这么高的服务器fps是受到争议的,不过我感觉如果在200fps左右就能感觉到明显的改进了。
一致性才是关键的。Fps从100飙升到512,这样可能会带来一个更差的游戏环境,因为sys_ticrate只在150左右,150是大多数服务器硬件所能承受的了的。
如果你有一个服务器的权限,而且想测试一下服务器的fps,那么在控制台输入rcon stats,看看你的服务器是否加速了:暂时地把sys_ticrate调到10000,然后在看看服务器的fps是否超过100,如果超过100,那就是加速了的。
ex_interp:
在解释这个参数之前,我们看看Webster字典对interpolate(添加,改写)这个词的解释.
(以下是Webster字典的解释,译者这里不将原英文去掉,是让大家容易看到原有的解释)
Main Entry: in•ter•po•late
主要条目: in•ter•po•late
3 : to estimate values of (a function) between two known values
3 : 评估两个已知值之间的量的关系
intransitive senses : to make insertions (as of estimated values)
不及物动词:进行插入(到已评估的值之中)
每一秒你只能从服务器获得有限的更新,因此是不可能每次都那么精确地及时地与服务器达到同步。举个例子:
下面的图形显示的是圆的线性内插法。当数据点(更新数据包)的数量增加的时候,则插入的量则变得更加地准确。在CS中,你可以将这个比喻成在一秒内一个人物位置变化所跨越的范围。在服务器看来,这是一个精准的圆圈,而从客户端就需要在两个“真正”的数据包中插入一定的数据。
这就是ex_interp作用所在。在每一个更新包之间都会有一个很小的时间增量存在,这个时间由half-life的预处理系统计算。ex_interp设置了在每两个连续的更新之间的插入数(时间单位是秒)。在上面所看到的图象中,这些小的时间间隔会表示为图象的直边。因为插入值的处理是在客户端进行的,所以在服务器看来并不是完全的同步的。没有什么可以代替从服务端发出的真实的数据更新包,不过插入值的计算在大体上还是能达到要求。