服务器fps与的意思是,每秒钟,服务器接受和发送用户数据,并进行计算的游戏帧数。这个数可以理解成服务器每秒钟最多可以给每个玩家发送其他玩家的位置,动作,和接受每个玩家动作的次数。这个值会根据服务器运算量的大小而发生变化。
hlds默认的fps是60.用hl booster等插件可以提高这个值,但会增加对服务器资源的需求。我认为60其实也应该不太够,0017秒的间隔,我的服务器都用booster定在200。
下面介绍sv_maxupdaterate,这个也是服务器参数,客户端是没有的,这是限制发送给每个玩家最高update速率的值。比如服务器fps是100,sv_maxupdaterate 是50,对客户端来说,每秒钟最多可以得到的更新就是50次而不是100次。如果这个值高于服务器的fps,那是没有意思的。
对于客户端来说,每秒钟得到越多的更新数据,在玩家屏幕上与其他玩家的位置就与服务器里真正的位置更接近。
现在介绍cl_updaterate,cl_update是客户端的值了,客户可以根据自己的需要设置,默认值是30,也就是最多每秒从服务器接受更新的次数,或者说是要求服务器每秒发送更新的次数。最好是设成与服务器sv_maxupdaterate一样,因为我们要得到尽量多的更新来刷新我们屏幕上敌人的位置。但设比sv_maxupdaterate高是没有用的。(所以我自己的CS16客户端都是设置成100),另外这个值比你的fps_max高或比你显卡能够达到的fps高也是没有太大的意义,反正显示不出来。
cl_cmdrate
这个也是客户端的值,是每秒钟发送给服务器的客户端动作的值(移动、瞄准、与射击等动作),忘了默认值是多少,我都是设置是30,我想我每秒钟最多做那么多动作吧(这个值设高了会导致ping升高,再高会出现choke),是否收sv_maxupdaterate限制,俺也不清楚。
解释一下choke,choke与loss不一样,choke是值应该发送给客户或服务器而没有发送出去的数据包,loss是发送了但没有收到。
这个值有很多原因引起,而且一般情况下,不会影响游戏的可 *** 作性(就算是稳定在100)
比较常见的原因是CS服务器管理员的参数调整不正确,服务器配置不对,服务器里还有一个参数是sv_maxrate,很多服务器为了节省带宽,设置了比较低的sv_maxrate,但却设置一比较高的sv_maxupdaterate,但客户端设置cl_update比较高时,因为sv_maxrate的限制,不购带宽传出全部足够的数据,导致了choke,同理,如果用户端设置过高的cl_cmdrate,也会因为带宽的限制不能传出全部的数据,也会出现choke
如果你真的很在意choke,首先检查你的cl_rate,默认都是9999也就是9K(与服务器端的sv_maxrate,sv_minirate类似,向服务器传送带宽使用限制,你1秒钟不可能发送超过7K的数据的,放心好了),
减低你的cl_updaterate(默认值是30)和cl_cmdrate(我建议大家这个值放30就可以了,这个参数太高ping会高起来)。
根据你的实际网速,设定你的客户端参数
56k
rate 3000
cl_cmdrate 15
cl_updaterate 10
cl_rate 9999
cl_cmdbackup 2
_
112k
rate 6000
cl_cmdrate 20
cl_updaterate 15
cl_rate 9999
cl_cmdbackup 2
_
256k
rate 9000
cl_cmdrate 25
cl_updaterate 20
cl_rate 9999
cl_cmdbackup 2
_
384k
rate 15000
cl_cmdrate 30
cl_updaterate 25
cl_rate 9999 OR 15000
cl_cmdbackup 2
_
650k
rate 17000
cl_cmdrate 35
cl_updaterate 30
cl_rate 9999 OR 17000
_
768k
rate 20000
cl_cmdrate 40
cl_updaterate 35
cl_rate 9999 OR 20000
cl_cmdbackup 2
_
1MB+
rate 23000
cl_cmdrate 45
cl_updaterate 40
cl_rate 9999 OR 23000
cl_cmdbackup 2
__________________
什么是choke,如何降低choke了。
choke代表在两个方向上更新没有被送出的数量,因为通讯连接已经饱和了。
(Loss则相当不同,并且很少被使用,它代表被送出,但永远不会到达目的地的更新的数字。如果玩家经历到了很大的loss, 意味着在网络连接上出现了技术问题,这个问题不在这个文章的范围之内。)
让net_graph开着,并监测choke值。如果choke发生了,逐渐的减低cl_updaterate和cl_cmdrate值,直到在战斗中不再有choke
整体目标是让cl_updaterate和cl_cmdrate尽可能的高(以提供一个理想的移动动作显示),同时保持choke很低或者是0,在战斗中
这些都是参考,客户端不多说,你自己研究就好,至于服务器,上述内容已经很详细;一般我们玩cs的时候,经常用的是以下几个参数:
cl_cmdrate 101;cl_update 101 ;rate 20000 ;fps_max 99; max_shell 0;e_eax 1;net_graph 0;fps_show 0;sensitivity xx; 而对于ex_interp这个参数,一直都有争议,因为像cpl等著名的大赛都禁止用这个参数,否者会被认为是作弊
cl_cmdrate:
这个参数决定了每秒钟你--即客户端发给服务器多少个数据包。很显然,这个值越高,服务器对你执行的命令的响应就越快。如果你拥有宽带网并且是其唯一使用者,把此值设高对你没什么坏处。如果你和你的朋友在一处上网打CS,并且能感觉到经常出现延迟的现象,那么这个命令就是罪魁祸首。大多数的宽带(主要是ADSL)并不提供足够的上传带宽,而这恰恰是“cl_cmdrate”所需要的。
cl_updaterate:
“cl_updaterate”和“cl_cmdrate”颇为类似,只是反其道而行之。它控制的是每秒钟你从服务器端接收的数据包的数量。因此,它依赖的是你的下载速度。你的“cl_updaterate”值越高,你和服务器的同步率就越高。既然只有服务器能决定你是否打中了,你当然希望收到足够多的数据包以保持和服务器同步。
sv_maxupdaterate:
如同“cl_updaterate”控制每秒钟客户端发给服务器端的最大数据包数量,“sv_maxupdaterate”就是每秒钟服务器端允许客户端接收的最大数据包数量。因此,把“cl_updaterate”设置的高于“sv_maxupdaterate”是毫无意义的。
sys_ticrate:
这个参数设定的是每秒钟服务器将计算出的帧数。默认值是100。为什么服务器的FPS(每秒钟的帧数)重要呢?这个参数本身决定了你在这个服务器上的感觉。我肯定我们都有过这种经验:有些服务器好像是架设在“深蓝”(或者曙光?龙芯?呵呵)上,而我们就好像是在局域网里打比赛一样。
“sys_ticrate”只是设定你服务器的最大FPS。一般来说,你的服务器不会达到这个值,因为你的 *** 作系统并不允许你这样。有很多种不同的方法来提升服务器的FPS,但是其中很多种都需要服务器提供商的合作。请记住,提高服务器的FPS会导致服务器提供商的机器CPU加重负担,因此多半服务器供应商们不会这么做。(出于某种原因,在de_inferno和de_aztec上提高服务器的FPS会导致CPU过载)。基于Windows的“半条命”服务器的默认FPS是64,而基于Linux的服务器的默认FPS是50。某些情况下,你可以把服务器FPS提高到512。是否使用如此之高的服务器FPS现在还有争议,但是就我个人的经验,通常在200FPS下你的游戏感觉会有明显的改善。
稳定性是关键。FPS在100和512之间跳来跳去只会使你的游戏感觉更糟糕,因此当你的服务器一般状态下是150FPS的时候,不妨把“sys_ticrate”设成150。
如果你有服务器的远程控制权限并且想知道服务器当前的FPS,那么就在命令台中输入“rcon stats”。要检查你的服务器有没有被提升过,暂时把“sys_ticrate”设成10000,并输入“rcon stats”。如果你的服务器FPS大于100,那么你的服务器就是被提升过了。
ex_interp:
开始之前,韦氏大辞典如下定义“interpolate”(插值):
Main Entry: in·ter·po·late (主要词条: interpolate)
3:to estimate values of (a function) between two known values (3:估计两个已知函数值中间的函数值)
intransitive senses : to make insertions (as of estimated values) (不及物动词: 插入(在估计值的时候))
你不可能完全和服务器同步,因为你只是每秒钟接收到一定量的数据包。比如:图所示。随着数据点的增加,插值图形将越来越接近原本的圆。CS中我们可以认为这个圆就是一个玩家中在一秒钟不同的位置。从服务器的观点来看,它就是一个完美的圆,而客户端不得不通过插值来预测两个数据包中间的空档。
这就是“ex_interp”出现的原因。两个数据包之间的空档,就要由“半条命”的预测机制来决定了。“ex_interp”设置的是在两个连续数据包之间隔多长时间插值一次,其单位是秒。如上图所示,这些小的时间段就对应了插值多边形的边。因为插值是由客户器端做出的,他和服务器端的判断并不是完全一样。没什么东西能替代真正的数据包,但是插值预测大多数情况下都做得不错。
对于在线游戏的推荐值:
rate:
我已经确认过rate最高是20000,设成20000以上是没有任何意义的,甚至有可能会降低性能。
推荐值:
rate 20000
sv_maxrate:
这个值通常会被设成0。对于在线游戏来说,这并不是最优值。“sv_maxrate 0”会自动监测所有玩家的连接速度,并满足每个人的要求。假定“半条命”允许玩家使用超过20000的“rate”值,如果一个玩家疯到把“rate”设成999999999,服务器会满足他的要求。这不仅导致了带宽的浪费,也导致了服务器过载。因此我推荐一个更安全的值“20000”。事实上,“sv_maxrate 0”和“sv_maxrate 20000”有可能效果是相同的,但是预防措施总是没有坏处的。
推荐值:
sv_maxrate 20000
cl_cmdrate:
这个参数的理想值应该是和服务器的FPS一样(而不是原来大家认为的客户端FPS)。如果你向服务器端发出的更新超过服务器本身的FPS,通常那些多余的数据包就会被丢弃掉。因此,“cl_cmdrate”设置过高没有什么大坏处,但是它浪费了你的带宽。
推荐值:
cl_cmdrate 等于或者大于服务器FPS
ex_interp:
把这个值设成0。CS会自动把你的“ex_interp”设成“1/cl_updaterate”(你的命令台会告诉你“ex_interp”被强制设成XX毫秒。原文“ex_interp forced up to xx msec”)。这是因为两个数据包之间的时间间隔就正好是1/(每秒更新次数),这就是你需要客户端做出插值预测的时间长度。调整“cl_updaterate”会自动调整“ex_interp”(当“ex_interp”设成0的时候)。我建议你只修改“cl_updaterate”,而让你的CS来自动修改“ex_interp”。你现在不能把“ex_interp”设置的低于“1/cl_updaterate”,而把它设高则导致了你射击对手的时候不得不瞄准出现在你屏幕上的人的后方,这种行为通常被认为是作弊(原文exploit,因为欧美比赛中exploit也算是作弊的一种,因此这里就直接翻译成作弊了)。比如,如果你的“cl_updaterate”是101,你“ex_interp”的正确值就是“1/101=0009”(9毫秒)。而使用默认值01就形成了前述的“作弊”(又是exploit,我ft)
推荐值:
ex_interp 0
cl_updaterate:
很长时间以来的做法是让“cl_updaterate”从101开始下降,降到你可以接受的“choke”值。可以用命令“net_graph 3”来查看“choke”。对我来讲,“choke”是我最后才关心的一个数值。事实上得到“cl_updaterate”的最优值是更为复杂的。CAL比赛服务器端设置都是“sv_maxupdaterate 101”,所有有人可能会觉得“cl_updaterate”应该设成101。理想状态下,这是对的,但现实中这并不正确。美国大部分的服务器并不能提供100FPS,这就意味着每秒钟服务器不可能发出100次更新。因此“cl_updaterate 101”除了让你的“ex_interp”变成0009之外,并不能保证你每秒钟都收到100次更新,这就导致了玩家们的游戏感觉不断在变。既然没有(除非有远程控制权,“rcon stats”)知道服务器FPS的方法,我们就不得不猜测“cl_updaterate”的最优值。你可能说:“不妨把“cl_updaterate”设成101,这样就保证了能尽可能多的接收到数据包”。这样做的问题是忽视了“cl_updaterate”对“ex_interp”的影响,而实际上你的“ex_interp”应该设的更高。
为了找出最优的“cl_updaterate”值(记得把“ex_interp”设成0),将其值从101开始下降直到游戏中的人物只有非常轻微的抖动。“轻微的抖动”的程度只是个人的偏好而已,只要你的“ex_interp”等于“1/cl_updaterate”,游戏中的人物就应该是在正确的位置上。你必须针对每个服务器来调整你的“cl_updaterate”。别害怕使用低于50的“cl_updaterate”值。预测机制会发挥它的作用。注意:大多数公众服务器会把“sv_maxupdaterate”设成30,这时“cl_updaterate 30”就是最正确的。
请注意“cl_updaterate”从低向高调整是行不通的。一旦你的“cl_updaterate”设置到了一个较高的值,“ex_interp”并不会自动调整,而你不得不一次又一次的手动输入“ex_interp 0”。下面是我写的一个调整“cl_updaterate”的很方便的脚本:
调整更新速度的设置文件
推荐值:
“cl_updaterate”应该等于服务器的FPS,而且不应该超过服务器的 “sv_maxupdaterate”值。
sys_ticrate:
寻找合适的“sys_ticrate”值需要做一些试验。首先,如果你的服务器fps没有被提高到100以上,那么把这个值设成大于100是毫无意义的。如果你碰巧租到的是一个高性能服务器(即FPS被提升过),那么你就可以对“sys_ticrate”做点什么了。尽管越高的FPS是件好事,但是把“sys_ticrate”设置的超过200通常不是件好事。比如你把“sys_ticrate”设成9999, 你的服务器FPS则会随着当前地图上的战况而在150到1000之间晃悠。因此把它设置的低于200,会提供一个更稳定的游戏环境。通常,服务其提供商的每台计算机都会运行多个“半条命”服务器,所以如果所有这些服务器的“sys_ticrate”很高的话,就会占用极大的CPU资源。而使得每个“半条命”服务器上的玩家都感觉不爽。(并且多半你的服务器供应商还会增加月租金)。
最后,服务器的FPS只能是某些特定的数。比如,我的服务器只能工作在85、102、128、170、256等几个FPS下,而且不会出现其它的FPS值。如果你把“sys_ticrate”设成100,你的服务器会自动选取小于100的那个工作值(上面情况下,将是85)。所以请试着在你想要的FPS上加上20到50,来设置“sys_ticrate”。
推荐值:
sys_ticrate 110-180, 取决于你服务器的质量。
局域网赛事注意事项:
那些局域网赛事的主办者,比如CPL,使用“cl_updaterate 101”的原因是由于他们使用了高品质的服务器。如果服务器的FPS被提高到100以上,那么使用“cl_updaterate 101”就是一个合理的值。一个快速的查看你局域网服务器FPS是否被提高的方法是看玩家的ping。一个运行在50或者64FPS的默认服务器通常会让玩家的ping超过15毫秒,而一个被提升的服务器则会提供一个远小于此的ping值,通常是在5毫秒左右。就我所知,CPL、ESWC和WCG都是使用的提升过的服务器。在游戏中影响了游戏d道的参数分别是:
cl_cmdrate
、cl_updaterate
、rate
、
ex_interp
、这四个参数。
特别说明:CPL
lan比赛强制并且是不能修改的参数标准为:
cl_cmdrate
101
、cl_updaterate
101
、rate
20000
或
25000
、ex_interp
001
。
1、为什么CPL强制cl_cmdrate
101
cl_updaterate
101
都是101而不是其它的参数呢
cl_updaterate是它控制的是每秒钟你从服务器端接收的数据包的数量。因此,它依赖的是你的下载速度。你的“cl_updaterate”值越高,你和服务器的同步率就越高。既然只有服务器能决定你是否打中了,你当然希望收到足够多的数据包以保持和服务器同步。但是因为你的网络的环境决定你不能使用101这就好象你用一个试管去接口径是5寸的自来水水龙头,最后的结果当然是你的试管破裂。
cl_cmdrate
101这个参数决定了每秒钟你--即客户端发给服务器多少个数据包。很显然,这个值越高,服务器对你执行的命令的响应就越快。但是做为中国都是使用1M带宽上网的用户来说,你最大的上行速度也就是54KB而不是1M这就好象你用了一个水桶去接口径只有1CM大小的自来水水龙头的水一样的道理,最后的结果是你的上行根本达不到要求。
并且需要在这里重新指出的是:你的网络下行完全根据你的网络上行而决定的。比如:你下行可以达到185KB/每秒的速度,而你的上行就只能达到54KB/每秒的速度。再做一个比较形象的例子就是你在家里使用QQ传文件和你在网吧里面使用QQ传文件时会发现在网吧明显要快于家里,
这是为什么呢?第一:就是网络的带宽大;第二:就是因为是你的上行来决定了你的下行,当上传的速度越快那么你的下载速度也就越快。如果我记得没有错的话这样的技术叫做“不对称传输”是电信采用的传输方式。
两个参数一起使用后导致的现象就是高ping或是瞬间的爆ping现象发生。其表现出来的形式就是你的ping值将永远大于每方最上面的平均ping值。而要完全解决ping高的问题最重要的还是跟你的网络环境硬件有重大的关系。如果你换一个2M的带宽上网那么ping值自然就比1MB的小,这个道理我想也是不用我再多讲的了。
在LAN下你这样设置是对的,之所以设置成这样是因为比赛是在LAN里进行服务器的传输质量高同步高,所以才敢采用101这样的最大的同步率
在最后还需要指出的是在服务器中突然出现warning:CL_FlushEntityPacket的问题原因就是使用cl_cmdrate
101
cl_updaterate
101这样的
参数导致客户端无法达到参数所设置的同步数率而出现的lag现象
服务器端配置文件参数参考:
sv_maxupdaterate
30
//
服务器每秒更新最大频率
//
根据实际网络状况调节
//
sv_maxrate
/
300
=
要设的值
//
默认=30
//
局域=101
2为什么rate
要设置成20000
或25000呢
这个rate
要设置成20000
或25000也都是跟服务器相关的,都不能大过sv_maxrate
25000所以一般都设置为20000
到25000但是测试得到的结果是25000是最价的参数
根据服务器的参数可以计算出来:
sv_maxrate
25000
//
服务器最大传输速率
<0-25000>
//
(服务器上传带宽
x
125)
/服务器设定的最大人数
=
要设的值
//
0=无限制
//
局域=25000
好了以上的参数我们先讲解到这里,最后就是一个曾经引起很大争议的参数ex_interp,这个参数在CS中代表了游戏补偿桢的补充命令。
那么究竟它又有什么好争议的呢?甚至到CPL那里随便的修改ex_interp这个参数值都将视为作弊。
姑娘、请站住的感言:
xx
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)