网游服务器系列之一:网游数据通信特点

来源:互联网 发布:空姐老婆知乎 编辑:程序博客网 时间:2024/04/30 11:11

两面人原创,CSDN 首发

网络游戏的数据通信的带宽占用情况是有一定规律可循的,分析这些规律对设计服务器的负载均衡,优化服务器的网络I/O性能都有很大帮助。下面以著名网络游戏《魔兽世界》为例,选取三个典型的游戏场景,通过NetLimiter记录游戏客户端的网络I/O的带宽占用情况,分析网游在不同场景下的数据通信特点。

首先选择在一个无人(没有NPC也没有其他玩家)的野外 场景,角色站立不动一段时间,记录上下行的传输速度,然后角色迅速的不停移动位置,记录数据。得到的结果如下图:

图1无人荒野

从图中可以看出,

  • 无论是静止还是运动时,下行带宽都远高于上行带宽(图中上行带宽的单位是Byte/s, 下行带宽的单位是Kbyte/s)
  • 从静止到运动,上下行带宽都明显增加
  • 静止时上行数据发送非常离散,运动时开始有连续的数据发送。

 

下行带宽占用高于上行这是绝大多数C/S结构网络应用的共同特点,因为上行数据一般是请求服务,数据内容包含主要是请求的信令和参数,数据量一般较小,下行数据是是服务器的处理结果,数据量较大。在网络游戏中上行数据主要是当前角色的状态信息(位置、速度、朝向、动作等等),数据量较小且大小比较固定。下行数据包括角色的个人数据信息(道具、任务等等),场景变化信息,其他同步信息的,数据较多。

角色静止时,角色的状态发生变化较少,所以发送给服务器的状态同步报文也相应较少,剩下的上行数据传输一般是定期发送的保持连接的报文,所以静止时上行报文非常离散。但角色连续运动时,他的位置、朝向、动作、速度等状态都会频繁的发生变化,这些变化向服务器发送地越及时,服务器才能尽快的做出响应。把新的场景信息发送个当前角色,把角色的状态同步给其他玩家。响应的速度对玩家游戏的流畅感有重要作用。因此角色连续运动时,上行数据发送的频率会显著增加。

图2是在《魔兽世界》铁炉堡银行和拍卖行中间的空地,这里是一个很重要的玩家聚集地,很多玩家来往于银行和拍卖行之间,购买道具和管理银行中保存的物品。周围还有有很多NPC。

图2周围较多NPC和玩家,无战斗

从图中可以看出,上述 a)b)c) 三个特点依然存在,同时由于周围玩家和NPC增多,导致

  • 下行带宽比周围无人时有较大的增加(20倍以上)
  • 上行带宽有所增加,但是变化不大。

 

图3 是游戏中一场战场战斗的网络数据记录。该战场支持40人对40人的激烈对战。

从图中可以看出,

  • 战斗过程中下行数据大幅增加,平均到达12KB/s,经常出现偶发的下行数据峰值,是平均速度的两倍以上。

综合以上分析,可以得出网络游戏数据传输从客户端角度看,至少具有以下特点:

  1. 上行数据量和下行数据量非常不对称,下行数据远远大于上行数据。
  2. 上行数据量与玩家的操作行为有关,玩家操作少(如静止不动),上行数据就少且不连续;玩家有频繁的操作时,上行数据就明显增加。
  3. 下行数据量与玩家角色周围的其他玩家和NPC的数量以及他们的活动方式密切相关。周围的其他玩家和NPC越多,他们的行动都要发送给客户端,下行数据传输量就增加。如果其他玩家或NPC活动越剧烈(频繁的移动或激烈的战斗)也会导致下行数据量增大。

 

上面的数据虽然都是采集自客户端,但是通过数据也能分析出在服务器端带宽使用的基本情况。

假设《魔兽世界》一个游戏世界设计支持2000人同时在线,那么上行带宽一般不超过 500KB/s (250Byte *2000),当然这也是因为《魔兽世界》优化的非常好,我测过一些国产网游,上行带宽至少是这个的4~5倍。非战场环境下,单个玩家的下行平均带宽在0.25KB/s ~ 2.5KB/s,对于服务器而言,2000人在线发送数据的带宽在0.5MB/s ~ 5MB/s。具体的数值跟玩家在游戏中的聚集程度关系很大,因为游戏中一个人动作一下就要广播给周围一定范围内的所有玩家,玩家聚集得越多,广播量也就越大。而且广播量和玩家的聚集人数直接是指数关系。

战场环境一个玩家的平均下行带宽为12KB/s,2000人就是 24MB/s,这就已经远远超过了一半IDC机房常提供的独享百兆(b)的带宽量了。

根据以上分析,可以归纳出网游服务器端通讯层开发要注意的要点:

  1. 上行数据量的总量虽然不大,但是这些数据来源于数千个并发连接,所以难点在于如何处理并发连接的接收。
  2. 下行数据广播量非常大,远远高于上行数据,提高数据广播效率需要尤其重视,因为这对玩家感觉到的流畅程度密切相关
  3. 非战斗场景和战斗副本的下行数据量也有较大差距,为了更好的利用带宽资源,也为了方便IDC部署,设计时应将这两种场景的服务器分开。

 

以上只是对网络游戏数据通信特点的一些简单分析,后续将有一系列文章论述网游服务器的设计以及对这些问题的解决方案,敬请期待。

 

原创粉丝点击