设为首页收藏本站

ZMX - IT技术交流论坛 - 无限Perfect,追求梦想 - itzmx.com

 找回密码
 注册论坛

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

用百度帐号登录

只需两步,快速登录

搜索
查看: 13483|回复: 0

关于求生之路2锁定上传速率为50KB/S,导致怪多了就卡红色延迟的解决方法,L4D2联机卡顿解决

[复制链接]
 成长值: 258

签到天数: 4710 天

[LV.Master]伴坛终老

发表于 2016/4/14 14:48 | 显示全部楼层 |阅读模式 |Google Chrome 49.0.2623.112|Windows 10
天涯海角搜一下: 百度 谷歌 360 搜狗 有道 雅虎 必应 即刻
Source 引擎网络通信原理 [一]
基于Source引擎的多人联机游戏使用主从式(客户端-服务器)网络构架。服务器通常指运行游戏的专用主机,客户端指连接到服务器的玩家电脑。客户端与服务器之前通过发送数据包(又称封包)来通信(频率很高,通常每秒20-30个封包)。客户端从服务器接收到当前“世界”的状态后,据这些数据来创建视频和音频输出。客户端同样也从输入设备(键盘、鼠标、麦克风等)采集数据并发回服务器进行进一步处理。客户端仅仅与服务器进行着通信,而不与其他客户端通信(即非P2P)。与单机游戏相比,多人联机游戏需要解决各种各样的通信问题。

网络带宽是有限的,所以服务器无法在每次“世界”发生改变时发送数据给所有客户端。实际上服务器是按照一定的频率对“世界”进行快照,然后再广播给客户端的。封包在传送中也需要一定的时间(即Ping)。这意味着客户端状态总是滞后于服务器的。而且客户端将封包发回服务器又需要时间,服务器对客户端命令的处理就会有延时。每一个客户端的网络情况又不同。这一系列的时间差产生了许多逻辑问题。在快节奏的动作游戏中,每一毫秒的延迟都会造成顿卡顿卡的感觉,自然玩家玩起来也非常艰难了。除了带宽限制和网络延迟问题,封包在传输过程中也存在丢失的危险(丢包)。




Source引擎采用了多种技术方案来解决由封包通信引起的问题(至少要让玩家感觉不出这些问题)。这些技术包括压缩数据法、插值法、预估法和滞后补偿法。各种技术系统之间结合紧密,某一系统的变化可能影响其他系统。本文将会讲述各系统的功能和如何它们协同工作。

基础网络设计

服务器是按照一定的频率刷新游戏状态的。默认情况下刷新间隔为15ms,即每秒刷新率为66.666...,不过每个基于Source引擎的游戏(称之为“Mod”)可以设定其自己的刷新率。在每次刷新时,服务器会处理客户端输入的玩家指令,进行一系列的物理模拟计算、检测游戏规则、更新所有实体的状态等等。在刷新完一次后,服务器会决定是否向所有客户端发送“世界”状态,判断是否有必要对“世界”进行一次快照。当设定为比较高的刷新率时,服务器的模拟精度会提高,但也要为此付出高CPU和带宽消耗的代价。服务器管理员可以自行设定刷新率,方法是在命令行里加入 -tickrate 参数。但是我们不推荐通过这种方式设定刷新率,因为Mod在其他刷新率下可能不会按照当初设计的程序运行。
提示:-tickrate 参数在CSS、TF2、L4D和L4D2已取消,因为改变刷新率会造成服务器计时出错。在CSS和TF2里刷新率为66,在L4D和L4D2里刷新率为30。
客户端带宽通常十分有限,最糟糕的情况是客户端仍在使用调制解调器(Modem,猫),最大速度只有5-7KB/s。如果服务器尝试以高速率发送封包时,丢包将会不可避免的出现。因此,客户端需要告诉服务器它的下行带宽能力,即控制台变量rate,单位为字节/秒(bytes/s)。这是客户端中最重要的网络设定量,想要提升游戏体验务必要设定合适的rate值。客户端也可以申请一个特定的接收快照的频率,方法是修改cl_updaterate的值(默认为20),但是即使把它的值修改的再高,服务器向此客户端发送快照的频率最大也不会超过服务器设定的刷新率,当然发送的数据量也不会超过客户端设定rate值。服务器管理员可以限制数据传输速率(即限制向每个客户端的上传速度),方法是设定sv_minrate(最小速率)和sv_maxrate(最大速率)的值(单位均为bytes/s)。同理,服务器也可以限制快照发送速率,方法是设定sv_minupdaterate(最小速率)和sv_maxupdaterate(最大速率)的值(单位均为快照数/秒)。

客户端按照相同的刷新率从输入设备采集数据,并以玩家指令(User Command)的形式进行处理。玩家指令其实就是当前鼠标和键盘状态的一个快照。客户端并不会把每一条玩家指令都发送到服务器,而是按照一定的刷新率发送封包(通常是30)。也就是说同一个封包里可能包含着2条以上的玩家指令。客户端可以使用控制台命令cl_cmdrate来提高此刷新率,但是占用更多的上行带宽。

游戏数据经过差值压缩法进行过处理,以减少带宽占用。所谓差值压缩法,你可以理解为服务器无需每次都发送完整的“世界”快照,而只发送与上一幅快照相比有变化的部分。服务端与服务器之间的每个封包都经过编号以实现对数据流的追踪。一般而言,完整的快照只在游戏开始或者客户端经过持续数秒的大丢包(LOSS)后才发送的。客户端可以使用控制台命令cl_fullupdate来手动申请接收一次完整的快照。

很显然可以看出,从输入设备输入到反映到游戏世界的延时是由很多因素决定的,包括服务器、客户端的CPU负载、游戏刷新率(tickrate)、传输速度、快照接收刷新率等等,但最重要的还是封包传输延迟。延迟(Ping)是指从客户端发送一条玩家指令,服务器接收并响应,客户端收到服务器响应所用的时间。延迟低,意味着玩家可以有很好地游戏体验。预估法和滞后补偿法等技术为游戏提供了一个公平的环境。对网络进行适当的设置可以更好地提升游戏体验,但是我们还是强烈推荐默认设置。不恰当地设置反而会造成反面影响。


百度搜到的一个介绍
rate 连接速率,默认15000(设20000以上是没有任何意义的,还会降低网络性能。)
rate "15000"

大家如果使用的是ADSL上网方式,那么就意味着你的上行带宽为512Kbps也就是64KB了
理论上如果你的ADSL上行可以到足64KB的话(有些地区到不了)按照游戏默认的连接速率(rate "15000",可以大概理解成给每个连接到你服务器上的客户端分配15KB的带宽),是可以满足6个人的COOP的,这点我已经测试过。

百度搜到的一个介绍,介绍的是十年前的电话线上网,当时宽带最高速度64KB/s,现在是30Mbps,可以调大到目前l4d2版本最大值,比如说rate "30000"


自己找到个 net_splitpacket_maxrate 默认值15000(15KB),改成最大值30000(30KB)
还有一大堆,总结下大概是这样
rate 30000
sv_minrate 30000
sv_maxrate 30000
sv_mincmdrate 100
sv_maxcmdrate 100
net_splitpacket_maxrate 30000
cl_cmdrate 100
cl_updaterate 100

[发帖际遇]: 一个袋子砸在了 小樱 头上,小樱 赚了 3 樱币. 幸运榜 / 衰神榜
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册论坛 新浪微博账号登陆用百度帐号登录

本版积分规则

手机版|Archiver|Mail me|网站地图|IT技术交流论坛 ( 闽ICP备13013206号-7 )

GMT+8, 2024/11/27 00:36 , Processed in 0.097732 second(s), 20 queries , MemCache On.

Powered by itzmx! X3.4

© 2011- sakura

快速回复 返回顶部 返回列表