游戏开发论坛

 找回密码
 立即注册
搜索
查看: 6091|回复: 8

征求意见:游戏服务器实践分享

[复制链接]

10

主题

66

帖子

544

积分

高级会员

Rank: 4

积分
544
发表于 2012-12-20 21:00:29 | 显示全部楼层 |阅读模式
大家好。
我是一个热爱技术的人,从事商业的服务器开发9年多,参与和负责了几款不同类型的游戏开发,包括SNS、ACG和RPG;也负责过IM的开发。我想写一个游戏服务器的序列文章,主要是自己实践的总结。发帖目的是想大家给点意见,怎么写,对须要经验分享的人有效果。我将在业余时间慢慢写,以后将把文章按章节放到我的blog上:http://blog.csdn.net/herm_lib

首先说一下我的写作原则:
1 实践干货
       从实践出发,没实践过的,尽量不写。如果一些平时技术学习类的内容,会单独作为章节列出。人非圣贤,必有错,实践的内容不合理,大家指出,表示感谢的同时立马改正。
2 简单平实
       介绍的内容不玩虚,能用简单方法实现,绝不用奇淫怪巧的技术,把事情搞复杂化,以显示自己的技术水平。
3 不发明轮子
     没有特殊的需求,只用通用API,主要是标准C++库和特定平台的Socket、线程API等。那种重写STL什么绝对不干。
4 内容收敛
     就专注写游戏服务器的技术,对一些基础技术,比如面向对象、C++模板、网络基础的API和TCP/IP基础知识之类的不涉及。

写作目标
       游戏服务器的新手可以在阅读系列文章之后,可以从事商业项目开发,将序列文章作为参考知道自己该怎么做。而有经验的呢,也可能或可以从文章中得到不一样的实现方法,提升一定的技能。

写作大纲
前言
      简单介绍序列文章的组织结构,不同的读者查阅方法等,软件平台约定之类的。这章没什么好说。
1 游戏服务器架构
      由简入全的方法介绍分别对应不同的游戏类型服务器架构,不同类型和不同分区方式的服务器架构基本大同小异,我尽量整理出共同点,然后附加说明SNS类游戏需求比较奇葩架构方面处理方法。游戏服务器架构我个人倾向于分接入、逻辑和存储三个层次去实现,实际内容也按这三个层次展开。

2 基础设施服务器
       这些服务器完全通用,包括通行证服务器、更新服务器和服务器列表服务器等。

3  接入服务器和网络通信模块
      讲述为什么要用接入服务器,接着着重花笔墨细讲网络通信模块,在前面的章节的基础上完成一个完整的接入服务器。对了,本文将用到protobuf作为协议消息的encoding&decoding。

4 游戏逻辑-概述和架构设计
       这部分涉及内容蛮多的,我打算先说清楚逻辑服务器的架构设计,然后分别简述游戏中都用到的模块。基本上不同类型的游戏都差不多。我设计和实现模块原则就是尽量低耦合,不同模块将非常独立。
       逻辑服务器架构设计

5 游戏逻辑-基础设施
       数据处理模块
       基础逻辑模块
               这个主要是一个事件分发的功能,各个逻辑模块相互联系互动的纽带。另外就是游戏对象基础设施。
       简单的异步处理机制
              写逻辑的时候,我们看不到各种请求处理是异步的,和写同步阻塞代码一样。这个值得大家参考。

6 游戏逻辑-功能模块
       开放式空间模块
              游戏大世界,大家都可以随便进入的空间。
       封闭式空间模块
              房间、副本、战场之类的。
       角色基础模块
       宠物基础模块
       单位属性模块
       单位动态属性模块
              这个上面有区别,动态属性是什么呢? 像角色或者宠物参与战斗或者什么活动,这些属性会变化的,都称为动态属
       性。
       视野控制模块
       背包模块
              经常说道具背包,我们要把背包独立出来,做到和道具完全无关。
       道具模块
              道具可以放在任何地方,常见的就是背包里,也可以在邮件附件中。
       任务模块
       成就模块
              小游戏的成就比较少,可以用和任务一样的代码,成就的行为和自动接受的任务是一样的。但复杂的游戏,成就有很
       多,几百上千的,这时候可以参考这里的实现方式。用了优化策略,系统性能损耗基本上和成就个数无关了。
       战斗模块
              如果是不分区的服务器,这个将会在独立的进程中跑起来。做成分布式。这块将提到一个有趣的系统当机后重启,原
       先玩家所在的PVP战场有效性的处理机制。
       队伍模块
       聊天模块
       Buff模块
              游戏中,到处都是Buff对象。
       技能模块
              回合制的和即时的有差别,回合制的比较简单。即时的,像RPG类的技能,实现的时候有一些小讲究,不能实现的太直
       接,否则吃CPU有时候比较多一点,要让客户端配合做一点事情。
       AI模块
       天赋、种族专精类模块
              这个专门针对那种你有多少什么点,可以加什么属性值之类的,表现上看起来细节很多,乱七八槽的。在实际项目
       中,我用了一点小聪明,代码实现非常简单。要实现什么功能全由策划配数据。如果,比较实诚地去做的话,搞不好就偏
       复杂,容易出Bug,容易被作弊。

7 游戏逻辑-进程级的功能模块
        这些模块功能比较完整,一个模块对应实现成一个的独立进程。从表面看,进程太多了,提高运维的复杂度。实际上还好,这些进程配置都简单,而且对外提供独立的功能,即使当掉了,也不影响整体游戏体验,最多表现在玩家没法用某个功能了。
        好友模块
        公会模块
               公会模块独立地在一个进程里,如果公会会影响另外一个进程中的战斗Buff,影响玩家的人气值的获取,怎么办?强
        制交互是下下策,会让我们代码变复杂,不易维护。这里将会给出比较合理的参考。下面联盟之类也类似。
        联盟、血盟模块
        邮件模块
        商城模块
        动态模块
               这个基本上借助后面讲到的存储代理实现掉。

8. Cache和存储
        存储包括存储前端的Cache和后端的数据落地。我们将简述一个通用的存储代理,然后把数据写到MySQL。MySQL只做为数据落地的工具,不做其他用途。这一章将涉及LRU什么的;一些分布式的常识,比如简单Hash映射、一致性Hash;同时借助反射的机制实现通用的数据Cache和存储系统。
       概述和架构设计
       实现

大纲写完了。有兴趣的同学们请提意见,谢谢。
email: daemon.huang@gmail.com
        
      


      
      
   
      
      
      

11

主题

1238

帖子

1782

积分

金牌会员

Rank: 6Rank: 6

积分
1782
发表于 2012-12-24 19:54:38 | 显示全部楼层
支持楼主..............

6

主题

64

帖子

330

积分

中级会员

Rank: 3Rank: 3

积分
330
发表于 2012-12-24 22:31:13 | 显示全部楼层
楼主这么好心,居然没人顶,我建议楼主写好,直接出书吧,只要接个合理,肯定买的人很多

3

主题

75

帖子

172

积分

注册会员

Rank: 2

积分
172
发表于 2012-12-27 10:16:57 | 显示全部楼层
了解一下

10

主题

66

帖子

544

积分

高级会员

Rank: 4

积分
544
 楼主| 发表于 2012-12-29 09:41:16 | 显示全部楼层
dcg1985362 发表于 2012-12-24 22:31
楼主这么好心,居然没人顶,我建议楼主写好,直接出书吧,只要接个合理,肯定买的人很多 ...

我现在还真得有这样的想法。

58

主题

1437

帖子

2207

积分

金牌会员

Rank: 6Rank: 6

积分
2207
发表于 2012-12-29 21:05:52 | 显示全部楼层
daemon.huang 发表于 2012-12-29 09:41
我现在还真得有这样的想法。

还什么都没写就要研究出书...好歹先写点干货吧亲

1

主题

11

帖子

108

积分

注册会员

Rank: 2

积分
108
发表于 2012-12-31 22:45:25 | 显示全部楼层
重在实践,楼主不妨写几章出来,看看效果

10

主题

66

帖子

544

积分

高级会员

Rank: 4

积分
544
 楼主| 发表于 2013-1-1 21:47:13 | 显示全部楼层
前段时间的项目发生点变故,计划有变了。最近开发上都有点压力,现在自己做flash的东西,这两天又折腾cocos2d-x。这么长时间才写了1300字。时间不够,静不下心写后台的东西。人在江湖,身不自由啊。

1

主题

5

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2013-1-6 12:31:41 | 显示全部楼层
支持!我之前也有类似想法,也是耽于琐事缠身,就写作角度来看,我其实更倾向于从具体案例入手来写作,有点类似MBA的那种案例教学,具体就是列出几种常见的需求模型,对这几种需求模型进行需求分析,给出解决方案原型。欢迎交流,我的QQ是43508865
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-11 07:51

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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