浅谈游戏服务器-》功能模块上来看(一)

转自http://www.cppblog.com/ziyebuboka/
游戏服务器在网游上的作用不容考虑,游戏能做大到什么程度,还是有很大的依靠的,这篇文章先从功能模块的角度来谈一个完善的游戏服务器需要实现哪。
一:游戏服务器的作用:连接各个网游客户端,实现各客户端的通信,连接,数据操作
二:先从大分类上来:游戏服务器按一般架构来说具备1
1:登陆验证注册和账号有关的所有操作的服务器 我们简称他为registerserver
2:游戏逻辑操作服务器 我们简称他为gameserver
不用细说大家也明白了,说一个玩家登陆进入游戏世界的流程:玩家打开游戏客户端(这之前会有更新操作,不过这只是连接更新服务器的一个文件比对和下载过程,我们不将他列为游戏服务器之内)说到这里朋友会发现游戏登陆上目前有两大类,一类是先选服务器后输入账号 一类是先输入账号后选服务器,这里说下区别
先选服务器后输入账号的一般来说都是将registerserver和gameserver配对,就是你先选择服务器,而后你连接上的就是此服务器的registerserver,通过此registerserver来进行账号验证等等。另一类先输入账号的,无非是先制定一个中心registerserver(或者是随机一个,因为register有时候会弄好多个由运维配置来做动态均衡),账号验证成功后再显示服务器列表,然后玩家选择了服务器后,则从指定服registerserver去数据库查询玩家此服的角色列表(当然了,这里如果非有人的服务器是做成查询角色列表就从gameserver走的流程,我也没意见)。返回后,客户端进入角色选择界面,客户端与registerserver断链,玩家选择角色,与gameserver连接,去数据库提取角色,注册进入游戏服游戏世界,反馈角色信息给客户端,客户端进入游戏世界。然后消息发送过来发送过去的开始了。。。。。。
上面说的是针对一个普通的一对一架构的服务器所有的一个登陆流程,看到这里,朋友们应该对registerserver和gameserver的基本功能有所了解了。一个是登陆验证用(垃圾点的小公司没有注册账号的主页的话也会通过这个在游戏里直接注册账号。。。)到登陆进入游戏世界的过程。
再稍微高级点的就是加个聊天服务器了,因为聊天这个功能实在是太耗性能了,特别那啥的那公聊,你发个一句,服务器得有多少人就发多少回。。。
打个比方你发一句话 50个字那就是100 一个服有那么个几K人的话,就打比方5K人 一句话发送就得是一个全服人口大FOR循环,网络还得消耗掉5000*100字节
所以你看各游戏公聊国聊那啥的都时间限制要不就收费,他扛不住啊。
所以这个地方就出来个性能优化方案了,加个聊天服务器,也就是玩家在登陆成功与gameserver连接成功的同时要与聊天服务器连接成功,聊天服务器有个全服在线角色表,一个大FOR循环和那啥的5000*100就让他来发吧,至少对gameserver没影响了。
好了,一个普通服务器的基本介绍就说到这里,读者也应该有个基本了解了,具体架构上的就不细说了,赶明换个帖子发。这里还是接标题从功能上来分析服务器。
这里就只分析游戏服务器了,registerserver就不考虑了。
一个游戏服务器他的作用在与,所有的游戏数据操作都将在这里完成,我们将只将客户端作为显示和一个数据的完善缓存。一切的操作都必须在游戏服务器的验证之后才能完成。
功能模块分类(本人之间,有多余或遗漏的,欢迎补充):
1:脚本模块
2:属性模块
3:网络模块
4:数据库模块
5:日志模块
以上所列的为一个完善的游戏服务器所必须实现的功能 下面一一来说
1:脚本模块
没有脚本模块,脚本策划就得喝西北风,LUA首选很不错。
具体LUA的学习,推荐LUA程序设计,这玩意不用深究,会即可。
程序员要写好几个CPP,完成的功能是---》在C++中任意的调用LUA函数(或是执行一个LUA文件),在LUA中任意调用你提供给脚本策划的C++函数接口,如此功能实现后,哈哈,程序员们,你们的工作负担就轻了,很大一部分的逻辑编程将交给策划们去完成了
举例:程序实现一个接口例如 say(LPCSTR szSay) ,则策划可调用此接口 function mySay() say("欢迎来到游戏世界") end,就可
可用到的地方:具体物品的使用逻辑,特殊任务的逻辑,活动逻辑,特殊NPC逻辑等等等等,只要你愿意,跑步都可用LUA来
比如C++里可实现一篮子接口:AddItem 增加个物品 ChangeMap 跳地图 甚至是AddLevel等等 而由LUA调用此类接口,而后就是C++里做些操作,比如玩家点击物品就是调用相应物品的脚本:例:点击 血瓶 调用 LUA 的血瓶脚本,执行LUA函数调用AddHp
脚本模块很重要,可极大的方便工作,还有调试和维护,因为修改脚本,服务器是不用重编译的,则意味着可在调试中随意修改,甚至可在运营过程中随意修改某物品功能 某任务 某活动。。。,只需C++到LUA,把这个LUA函数RELOAD下即可
具体的游戏应用脚本的例子 大家网上找找吧 一坨子开源的。
2:属性模块:呵呵,不知道我取这个名字OK不OK,我也觉得不是很合适,大家又更好的命名没?
NPC的基本属性配置,物品的基本属性配置,叫属性配置可能更合适点,意思就是你要提供一个模块供策划可填入各个属性配置,甚至是GUI的配置又或者是任务配置。对于这个,我推荐使用EXCEL表格。
例如:NPC的表格至少包括 NPC名字 模型编号 血量 蓝量 移动速度 AI 等等,而后有策划往里面随意填配置 这里比如AI就是一个对应的脚本文件
这个读取表格由程序员实现,功能是要求要自由化,不然的话 策划加一条 你咋办,不至于从读取开始你的代码都得改吧,肯定能做到直接在NPCPROPERTY结构体里直接加一条和表格新加的对应就OK了。
如果OK得话,最好再提供个编辑工具给策划,任务的相同模式也可由此来实现:任务描述 任务要求 对话1 对话2 对话3 奖励1 奖励2 奖励3
物品:物品名字 模型编号 职业 等级 攻击 脚本
不然你总不至于傻到认为这些都是写代码里的吧。也可能有人想使用XML 随便了 不过我这里不想用XML 为啥 EXCEL清晰啊 就一行条目
这个模块是数值策划 任务策划的天下
3:网络模快:这个没啥好说的 一个基本功能,游戏世界都是在这之上也能成型,做好链接维护,收发消息
4:数据库模块:对数据的保存 其实这里我热衷于使用工厂模式,本地调试服务器具体逻辑用本地文档方式,上测试服上外网则用数据库,所以这里叫数据操作模块比较妥当点,就是玩家保存数据,保存帮派啦 等等世界信息的具体操作,这个很重要
5:日志模块:我将此日志模块分为两大类,一类是游戏服务器调试维护用日志,一类是游戏运营用日志,可选择使用本地文档或是数据库模式记录
调试维护日志没啥好说的,运营日志说说,是给客服提供的,谁消费了什么 交易流向 物品流向 等等的记录 GM操作的记录等等 比如万一某玩家装备被盗了,则可通过此来证明。

两点了,写不下去了,标记个一 明天来写二,看哪里写的不对的说下,我改正,明天再扩充的写下,然后游戏世界的操作

posted @ 2010-01-08 11:49  小 楼 一 夜 听 春 雨  阅读(2366)  评论(0编辑  收藏  举报