客户端-服务器通讯设置
有4个命令用来设置这个通讯的表现:
cl_cmdrate是客户端每秒钟通知服务器它的行为的次数。记住,数据在一次更新的流量取决于有多少事情发生。
cl_updaterate
是服务器每秒钟通知客户端地图里发生了什么的次数。同样,有更多的行为,就有更多的数据。流量发生在每一次更新中。
cl_rate
设定客户端能够在每秒钟传送给服务器的字节的最大上限。这个值是必需的,因为服务器不能可靠的监测客户端的数据传送率。这个值需要被设定到适合你到服务器的连接的数据上传的速率。
rate是服务器每秒钟传送给客户端的字节的上限。sv_maxrate,是服务器指定的上限,在速率超过sv_maxrate的时候使用。
从客户端到服务器的更新通常包含很少的数据-大约20字节。从服务器到客户端的更新包含许多数据,从在一个安静的地区的大概30字节到激战区的175字节。
例如,一个56k modem有最大33.6k上传速率,和一个最大56k下载速率。这里的值是字元(bit).但是,这些值是信号率,不是数据载荷率。信号率是每秒的字元数,但不是所有这些字元可被用于传送数据。有一些-大概10%-被用于控制信息。所以,一个33.6k字元每秒的连接能够实际上,传送大概30.2k字元每秒的实际数据,也就是3780字节-并且这是cl_rate应该被设定到的值(假设有一个完美的上传连接-如果modem连接到了一个有噪音的线路上,那么数据传送率会降低,所以值必须根据这个而降低)。
同样,根据这个换算56k连接的实际速率,rate应根据这个实际值而设定。
rate等于下载速度乘以0.9除以8
cl_rate等于上传速度乘以0.9除以8
通常,客户端没有很多的数据通知服务器端,客户端到服务器的通讯很少遭遇瓶颈,即使是在56k的modem上。
注意,控制信息载量依赖于客户端同isp的连接方式的不同而不同,但是在高带宽的连接上这个问题基本上可以忽略,因为这种连接所拥有的带宽通常超过服务器端所设定的限制。
cl_rate和rate的值的小数部分的设定绝对不会产生任何效果。设定小数部分能够提高性能只是一种街坊之间的谣传。
如同原来提到的,客户端到服务器的更新通常很少,以20字节连续发送。在一个56k的调制解调器上,如果有一个完美的连接,3780字节每秒到服务器的更新会是有效的,那么cl_cmdrate可以被设定到189。这样,半条命就会有一个硬编码的内在最大值,大概60。
从服务器到客户端的更新传送更多的数据。大的更新(例如激战状态)占据大概175字节。在一个完美的56k
modem连接上有6300字节每秒的有效传送率,cl_updaterate应该被设定到36。
cl_updaterate等于rate除以175
cl_cmdrate等于cl_rate除以20
通过宽带连接的玩家会有非常不同的设置,首先,宽带连接总是会有超过服务器提供的有效带宽。因此,rate和cl_rate都需要被设定到他们的最高值,因此客户端可以使用所有有效的带宽。
rate和cl_rate的最高值是20000。
对cl_cmdrate和cl_updaterate的正确设定值的计算实际上通常依赖于玩家连接到的特定的服务器,因为它的sv_maxrate值将成为有效带宽的限定因素,并且有效带宽定义了正确的更新设定。
如同前面提到的,半条命有一个内在的硬编码最大值,用于两个更新设定,推荐的设定是75(安全起见),这个应该根据需要通过调节sv_maxrate在连线的时候减低。
net_graph命令在屏幕上显示客户端同服务器的通讯的具体信息。
我们感兴趣的地方是:choke.
choke代表在两个方向上更新没有被送出的数量,因为通讯连接已经饱和了。
(Loss则相当不同,并且很少被使用,它代表被送出,但永远不会到达目的地的更新的数字。如果玩家经历到了很大的loss,
意味着在网络连接上出现了技术问题,这个问题不在这个文章的范围之内。)
让net_graph开着,并监测choke值。如果choke发生了,逐渐的减低cl_updaterate和cl_cmdrate值,直到在战斗中不再有choke.
整体目标是让cl_updaterate和cl_cmdrate尽可能的高(以提供一个理想的移动动作显示),同时保持choke在战斗中很低或者是0。