由于朋友介绍,周末陆续玩了两天 龙之谷(http://dn.sdo.com)。
  如果一个网络动作游戏可以打10分,那截止现在,我至少给它9分左右的高分。
无论从手感,动作技能设计,网络流畅度,场景风格,角色塑造,玩法设定,
新手引导,MM亲和度等方面来看,均属上乘之作。

强烈推荐喜欢玩动作类网游的朋友尝试一下。当作3D版的,更好玩的 DNF 吧。
  
  我选了[华南电信二区] -> [3服-烈焰风暴]。角色名 AKara ,欢迎来组。
  
  看来盛大又代理了一个能赚大钱的宠儿。
  
  好的游戏,不妨玩的过程顺便猜测一下它的实现。

---------------------------------------------------------------------

从7月22日11点到7月24日晚,游戏开了22个大区(电信16个,网通6个,教育网0),
每个大区分为4个独立的数据服分区,玩家数据在这4个服内不能互通。
  见 http://dn.sdo.com/web7/home/serverstat.asp
  
  【下面的分析都针对我选的大区来进行】

dnlauncher.exe是选区和patch下载器,选定大区后,其他操作都在主进程。
  DragonNest.exe是主进程,由dnlauncher.exe创建。
  貌似龙之谷client脚本用Lua?
  
  主进程中的服列表是每次登陆都随机排序,而每个服下的频道列表也是随机
排序。这个随机应该是client对http下载回来的tree内容的client端随机打乱,
这设定一定程度上分流了第一次选服的玩家(但对已有角色的用户来说,不方便);  游戏编程 2009FLY文摘,正正博客 WWW.2009FLY.COM 
也分流了每次进服后选频道的玩家(因为各频道共享角色数据,所以是等价的)。

---------------------------------------------------------------------

先贴一下我初步猜测中的龙之谷的服务器部署结构图:
   
  
  然后下面是对这个猜测的一些分析过程的数据。
  希望同对这方面感兴趣的朋友也提供一些纠正或想法~

---------------------------------------------------------------------

在 [进程开始->进入channel(的主城)->进入战斗副本->返回主城 ]
这四个游戏中经常经历的阶段中,可以观察到进程中的网络连接的变化:

(1)进程开始
  tcp 连接一条,这里先称远端进程为gate。  copyright 2009fly 2009FLY文摘,正正博客 WWW.2009FLY.COM 
  gate负责帐号验证,大区下的服务器组选择,创建新角色,选择角色等功能。
  试验多次,发现gate至少存在存在下面的6个。可看到每个服务器部署两个gate。
  119.147.185.98:14300
  119.147.185.98:14301
  119.147.185.85:14300
  119.147.185.85:14301
  119.147.185.86:14300
  119.147.185.86:14301
    
  http连接多条,估计用于下载分服信息的tree。

(2)进入channel(的主城)
  此时client与gate的连接断开。
  并建立tcp新连接一条,这里先称远端进程为channel。

经试验,1~9级的普雷利镇被划分为下面20个line(不用channel来命名,避免混淆)来分流:
  (A)
  line_1:119.147.185.71:14401
  line_2:119.147.185.71:14401
  (B)
  line_3:119.147.185.71:14402
  (C) 
  line_4:119.147.185.71:14403
  line_5:119.147.185.71:14403
  line_6:119.147.185.71:14403
  (D)
  line_7:119.147.185.71:14404
  line_8:119.147.185.71:14404
  line_9:119.147.185.71:14404
  (E)
  line_10:119.147.185.72:14401
  line_11:119.147.185.72:14401
  (F)
  line_12:119.147.185.72:14402
  line_13:119.147.185.72:14402
  line_14:119.147.185.72:14402
  (I)
  line_15:119.147.185.72:14403
  line_16:119.147.185.72:14403
  line_17:119.147.185.72:14403
  (J)
  line_18:119.147.185.72:14404
  line_19:119.147.185.72:14404
  line_20:119.147.185.72:14404
      
  而9~16级的凯德拉关卡现在则只有12个line来服务它:
  (B)
  line_1:119.147.185.71:14402 
  (C)
  line_2:119.147.185.71:14403
  line_3:119.147.185.71:14403
  (D)
  line_4:119.147.185.71:14404
  (E)
  line_5:119.147.185.72:14401
  line_6:119.147.185.72:14401
  (F)
  line_7:119.147.185.72:14402
  line_8:119.147.185.72:14402
  (I)
  line_9: 119.147.185.72:14403
  line_10:119.147.185.72:14403
  (J)
  line_11:119.147.185.72:14404
  line_12:119.147.185.72:14404
      
    选择竞技场channel则有12个line:
  (B)
  line_2:119.147.185.71:14402
  line_2:119.147.185.71:14402
  (C)
  line_3:119.147.185.71:14403
  line_4:119.147.185.71:14403
  (D)
  line_5:119.147.185.71:14404
  line_6:119.147.185.71:14404
  (F) 
  line_7:119.147.185.72:14402
  line_8:119.147.185.72:14402
  (I)
  line_9:119.147.185.72:14403
  line_10:119.147.185.72:14403
  (J)
  line_11:119.147.185.72:14404
  line_12:119.147.185.72:14404
      
  总结一下上面的line和channel信息,
  可以大致看出,龙之谷一台服务器上一般部署了4个左右channel进程,
  而每个channel进程合并了5~7个左右的line逻辑。
  
  目测估计每个line逻辑承载的人数不应该超过500,就算它300吧。
  PS:单进程超过2100人的7分割场景在线(一台服务器就2100*4=8k人)。
  由于高级line的人数不满,竞技场的人数不多,
  安照上面的配比,就算每个line承载1/2负荷,即150人。
  那可以粗略保守估算一下龙之谷现在的最高在线人数: 
  22大区 * 4小服 * 32个line * 150人/line = 42w

也就是每个大区有约1.9w玩家在线。

(3)进入战斗副本
  此时client与channel的连接断开。
  并建立tcp新连接一条,这里先称远端进程为war。
  
  经试验,war并不多:
  119.147.185.70:14500
  119.147.185.63:14500
  119.147.185.64:14500
  119.147.185.65:14500
  119.147.185.69:14500
      
  如此看来,一个小服内只有5台机器服务它的战斗。
  用上面的估算人数来粗略平均一下,就是平均每个war进程负荷1000人的副本战斗。
      
  如果是组队进入战斗副本,则除了原有的TCP的关键消息同步,
  还建立了每个玩家和war之间的UDP通讯方式(并非p2p),
  应该只用于同步非关键动作和移动。 
  龙之谷只允许最多4个人的组队。
  
  留意了一下这个UDP信道的通信量:
  两次2人组队关卡:
  858k/12min(平均1220byte/sec)
  877k/10min(平均1496byte/sec)
  
  一次4人组队关卡:
  706k/6min(平均2008byte/sec)
  
  而如果是单人进入战斗副本,则完全只和war进程有tcp网络通信:
  怪物AI完全是服务器驱动的。
  玩一个关卡大概8分钟,因为跑地图花去时间,加上过地图的加载。
  下行 100k(平均213byte/sec), 上行90k(平均192byte/sec)。

(4)返回主城
  此时client与war的连接断开。
  重新与某个channel建立连接。
  这里的"某个"其实就是之前(1)阶段中的那个channel。
  有一个假象就是:AKara角色 从 1~9级的普雷利镇 经过副本到底 9~16级的凯德拉关卡 后, 
  会发现client中的line竟然 从12号 变成了 7号。
  
  但参照上面的channel ip:port便能发现这两line属于同一个channel进程:
  普雷利镇   line_12:119.147.185.72:14402
  凯德拉关卡 line_7: 119.147.185.72:14402
  
  PS:
  龙之谷的同一个channel进程中的line之间的切换,是不需要断连接的。
  但是,不在同一个channel进程中的line之间的切换,是断旧连新的。
  
  这样归并多个line实现到一个channel进程的好处是,这几个line之间可以进行
  某些形式的互动,比如组队:和同channel其他line的玩家组队,会实时跳转line。
  本质上相当于MMORPG中的场景跳转而已。

---------------------------------------------------------------------

其实相比起这个服务器结构猜测;更应该总结的是游戏的各种优秀的策划设定。 
抽空另写一篇总结一下。这游戏我应该还会继续玩下去*_*。

---------------------------------------------------------------------

龙之谷服务器构架结构设计实现分析相关推荐

  1. [原创]龙之谷服务器构架结构设计实现分析

    [原创]龙之谷服务器构架结构设计实现分析 by AKara 2010-07-24 @ http://blog.csdn.net/akara @ akarachen(at)gmail.com @ wei ...

  2. 龙之谷服务器显示不了游戏,龙之谷服务器爆满 游戏进不去怎么办解析

    龙之谷服务器爆满 游戏进不去怎么办解析 来源:www.18183.com作者:雾里看海时间:2017-03-06 龙之谷服务器爆满 游戏进不去怎么办?很多新玩家进入游戏的时候会发现前面的区都进不去,本 ...

  3. 龙之谷服务器显示不了,龙之谷服务器爆满 游戏进不去怎么办解析

    龙之谷服务器爆满 游戏进不去怎么办解析 来源:www.18183.com作者:雾里看海时间:2017-03-06 龙之谷服务器爆满 游戏进不去怎么办?很多新玩家进入游戏的时候会发现前面的区都进不去,本 ...

  4. 盛大游戏李阳:龙之谷服务器设计

    原文链接:http://www.gameres.com/779278.html 9月23日,首届"梦想·匠心"腾讯游戏开发者大会于深圳举行,在技术分论坛上,盛大游戏<龙之谷& ...

  5. 龙之谷服务器仓库在哪个位置,全区全服版本更新至Ver.190

    各位亲爱的玩家: <龙之谷>全区全服已维护完毕,版本更新至 Ver.190.由于 华东电信四区  和 南方电信一区 已提前更新至Ver.190,故这两个大区仅为例行维护.也已维护完毕.请玩 ...

  6. 龙之谷服务器更新文件,全区全服 维护结束 更新至Ver.417

    本帖最后由 一尾双鱼 于 20-5-22 17:50 编辑 各位亲爱的谷迷: <龙之谷>于 2020/05/21 早上07:00 开始对 全区全服 进行 更新至Ver.417. 目前服务器 ...

  7. 记一次《龙之谷》手游代码分析

    目录 <龙之谷>手游挺垃圾的代码 首先,工具乱糟糟 其次,用的Unity4.6~4.7的版本 另外,发现使用了slua ulua + tolua的组合 其他,后面补充 主要场景渲染效果如下 ...

  8. 龙之谷如何找回服务器,龙之谷服务器忘了怎么办 服务器连不上解决方法

    信号问题:你所在的位置可能信号很弱,仅有2G,这样的信号情况下,玩什么游戏都卡,不仅仅是龙之谷会这样了.建议移动下位置,或者更换一个网络,使用wifi. 授权问题:你的QQ设置授权出了问题,在QQ里面 ...

  9. 龙之谷服务器互通信息,龙之谷5月10日华南电信二区服务器互通

    各位亲爱的玩家: <龙之谷>将于5月10日07:00对华南电信二区进行服务器互通升级,预计升级时长为4个小时.请留意官网信息,我们将通过官网公告告知结束时间. 本次华南电信二区具体互通升级 ...

最新文章

  1. python 把列表或者元组转成集合
  2. 十一、explain属性介绍
  3. yum安装nginx的负载均衡详解
  4. PHP中的foreach遍历数组
  5. A Greeting from Qinhuangdao Gym - 102769A 2020ccpc秦皇岛分站赛
  6. LeetCode 278. First Bad Version
  7. python定义栈_Python栈实现
  8. 最简单的嵌套循环,一句话即可。适合repeater,dropdownlist,gridview等等
  9. antd的table遍历之后添加合计行_付费?是不可能的!20行Python代码实现一款永久免费PDF编辑工具...
  10. linux查找某个命令属于哪个rpm包
  11. 关于MATLAB实现的数字信号处理(四)
  12. AcWing 900. 整数划分(完全背包计数问题)
  13. linux下的备份管理rsync
  14. [Java]HashMap的两种排序方式
  15. python 手机号码识别_python3库可以识别电话号码、姓名、电子邮件和地址
  16. lamp一键安装包不安装mysql_LAMP一键安装包安装与配置
  17. uvm transaction
  18. MacOS 连接网络打印机后一直不能打印
  19. java 图片画框并读取成base64数据
  20. 支付宝支付返回resultStatus:4000(系统繁忙,请稍后再试)

热门文章

  1. 怎么使用命令行查看mysql版本号_查看MySql版本号命令
  2. 什么是Three.js?(一)
  3. 解决“chrome正受到自动测试软件的控制”信息栏显示问题-V76及以上版本
  4. html5 阿狸照片展示,沫子晒5年前cos阿狸照片,又粉又嫩颜值高,而粉丝只关心36D...
  5. 超全的12种数组去重的方法
  6. 6个月Linux周末班学习计划书
  7. Adobe InDesign CC 2019 14.0.2 中文特别版 Mac 印刷和数字出版的版面设计软件
  8. java 数组的创建 与 赋值
  9. 核心动画——Core Animation
  10. 【矩阵分解二】FunkSVD