一个不分服的游戏服务器设计问题?

cmzx3444 发布于 2014/10/20 11:06
阅读 856
收藏 0

这个问题在知乎上提过,只有一位好心人回答,所以在这里希望能得到更多帮助。http://www.zhihu.com/question/26103524

最近自己想设计一个游戏,类似coc或者海盗骑兵,玩家不用选择服务器。

游戏主要需求:
整个游戏世界有很多村落组成,村落里是若干玩家(比如上线10人)组成,若干村落组成国家。
战斗包括整个村落和村落打,及玩家和玩家打,还有玩家和系统设定的npc打,玩家之间可以相互组队去打副本。
所有玩家之间都可以加好友,聊天,组队聊天,世界聊天等。
游戏中没有场景的概念,不是mmorpg。
玩家之间的战斗可以在双方同时在线下进行,不像海盗骑兵只能打离线玩家。

由于玩家可能比较多,单服的架构不合适,要做到较强的扩展(不需要理论上的无限扩展)。设计上玩家上线是1000万,同时在线是10w。
语言可以先不考虑(本人熟悉java,nodejs以及lua也可以考虑)

我的设计:
当新玩家登录的时候会分配一个游戏服,并在游戏服上创建初始数据。一个游戏服玩家上线假定10万。登录用http协议。
每个游戏服对应单独一个数据库。这样数据库不用去专门分库分表,当然也可能用mongodb,不过比较耗硬盘和内存。

问题:
1:我这样设计靠谱不?本人没有从0设计游戏服的经验,以前的游戏是单服的,所有功能一个服务器中,是分服型手游戏。

2:如果按我的设计来,玩家和玩家之间战斗,聊天,组队等基本上都需要去路由查询玩家所在的服务器,再做数据转发,很多时候还要复制玩家数据,效率是不是太低了?而且逻辑代码写起来可能很不简洁。

3:需不需要网关服?现在游戏服中有点网关的功能。如果要,网关服需要做负载均衡,感觉玩家到网关服的路由怎么解决?uid做哈希?

4:村落,国家是不是放在世界服上合适,世界服上可能还有组队副本等玩法,这样世界服会不会有单点风险?怎么解决?

5:缓存,我理解的缓存作用是保存玩家主要数据:玩家对象,玩家的背包数据,技能等。当玩家退出游戏一段时间后把数据刷到缓存中,并删除游戏服中的对象。如果玩家退出游戏后过一小段时间(假设1小时内)后再登录可直接读缓存,超过时间阀值则清除缓存。不知道大家是不是这样做的?

6:玩家数据同步,比如我战胜了玩家A,我会抢他资源,他也在线刚好也通过战斗获取了资源。这样资源的增减操作需要加锁。有没有别的办法?

先问这么多吧,不知道有没有人有空看这么长的问题,先说声谢谢了。
本人游戏界新手,干了一年多翻皮的活,现在辞职想写点有意思的,望各位不吝赐教。
加载中
0
warrior_by
warrior_by
mark,赞一个,不明觉厉
返回顶部
顶部