游戏服务器引擎设计
原文地址:http://hi.baidu.com/freedomknightduzhi/blog/item/d7bf17dbbe6c0b62d1164e6d.html
2008年01月26日 星期六 13:13
在写这东西之前,我有个事情要澄清一下:
本博客的目的,最重要的一点是记录某志学习的或喜欢的一些东西 以及 记录或发泄心情的日记 所用。后者大家都明白,前面的那个动机却给某志带来许多麻烦.
我要承认的是,在本博客中,极少资料是原创的. 不,应该说,没有资料是原创的.我现在处于学习技能的阶段,除了一些自己写的代码以外,我更多的是学习其他人的资料,总结了一下贴上来的,当然,一些非程序的资料更是直接转载来的.
可惜个人有个坏习惯,若转的帖子上没有标明"严禁转载"或"转载时必须表明作者,网站"该类信息提醒我一下的话,我实在没有兴趣去做额外的说明.但是这样不好,想了想,直接在博客标签上进行个全局说明好了,希望之后这种问题不会再麻烦我.
嘛,接下来说明正文.
一般来说,现在网络游戏的服务器设计大致分为以下三大类:
1:单服务器结构
2:多服务器结构. (根据服务器负责功能不同,有按地图范围进行划分的服务器设计,有按功能划分的服务器设计)
3:分布式服务器结构.
一:单服务器结构
在比较起先的MMORPG游戏中,大部分使用的是单服务器结构,一台服务器容纳人数大约为1500-2000人左右,根据硬件不同和游戏需要涉及的AI,逻辑等复杂度不同会有少许出入.
但是这种方式慢慢被淘汰了,因为网络游戏用户对游戏的品质要求越来越高,用户群也越来越大,开发者们不得不牺牲这种开发效率快,逻辑简单,但容载量小的单服务器结构.
二:多服务器结构
为了提高同服在线人数,多服务器结构慢慢流行起来,现在大部分游戏服务器结构也是基于该类结构设计的.
根据策划需求不同,多服务器结构可以设计为多种,一般来说,比较主流的功能分布方式有以下两中: 按地图划分服务器,按功能划分服务器.
按地图划分服务器,结构清晰,实现难度小,效率也相对比较高.但是会有部分资源的浪费(因为玩家不可能平均分布在每个地图上),另外一旦总控服务器(负责地图服务器间的分配管理的服务器)挂掉的话,会导致所有的地图服务器无法正常工作,而且由于每个地图保存一份数据,数据保存方面是相对独立的,所以数据安全性无法保障,一旦某地图服务器挂掉,则很大可能会遗失数据.
按地图划分服务器的话,一般服务器是分为以下三部分,世界服务器,地图服务器,网关服务器.
世界服务器负责世界地图的管理,它一般负责管理地图服务器的工作分配,数据转移通知功能,一些全局性的功能它也负责,包括读取发布网络游戏配置信息,全地图聊天公告的发布等.
地图服务器各自间是完全独立的,各自负责该地图区域内的一切功能,包括怪物AI,该地图的NPC,怪物,玩家,物品等所有信息,而且各自拥有独立的数据库进行记录.当一个玩家从一个地图切换到另一个地图时,地图数据库将通知世界数据库,世界数据库再通知另一个地图服务器,进行这俩地图服务器之间的用户数据传输.
网关数据库通常是负责玩家登陆的功能,同时也兼责一些世界服务器的调配功能.
//-----------------------------------------
按功能划分服务器的话,则是一种面象服务的设计思想,将游戏逻辑中某些常用密集型的功能分离开来,单独做为一个服务器进行控制操作,例如,怪物AI单独由一个服务器负责,物品管理单独由一个服务器负责等等,按照逻辑职能进行服务器分割.
这样做的好处是,当一个服务器出现问题的时候,是不会影响其他模块的运行,而且扩充性相对比较优秀简便.
但是一旦重要的服务器挂掉,如物品服务器挂掉,依旧是一个很灾难性的结果.不过,由于划分出了单独的服务器,保证了数据的分布式存放,比起场景划分服务器来说,多少还是安全了许多.另外,功能划分服务器还有一个比较大的问题就是,由于各模块之间有直接或间接联系,在服务器进行调试的时候难度会比较大.
三:分布式结构.
无特殊研究,待补充.仅知道支持远程对象调用,动态分布节点吞吐数据确保了服务器受压平衡,能够支持关键数据的多节点冗余确保了数据安全性.
服务器的设计考虑应从几个方面进行:
1:各服务器的吞吐数据平衡性
2:C-S-C的消息响应时间
3:数据的安全可靠性
4:开发测试效率,维护效率
小公司制作大游戏,EGS游戏服务器引擎
官网:www.j800.net
只需写游戏逻辑,快速开发高效稳定的游戏服务器
(含MMO框架源码和开发指南)
EGS,针对中小游戏公司开发的优秀游戏服务器引擎。中小游戏公司通常会由于时间、资金、技术、人力等众多限制而不愿承担长期开发的风险。EGS解决了这些问题,它使游戏开发项目避免了未知、昂贵和耗时的软件研发风险,从而使授权客户专注于游戏制作这一核心事务。
EGS包含了网络模块、数据库模块等众多丰富实用的功能与组件,且已具备基础游戏逻辑。经过长时间的测试与实际使用,它的稳定、高效以及实用性,完全能够满足当今网络游戏的需求,完全可以作为快速开发高效可靠游戏服务器的基础。
本文论述了如何设计一个网络游戏引擎,研究了网络游戏引擎的关键技术。
并且系统地阐述了设计一个游戏大厅所涉及到的技术要点,重点介绍了设计服务端所采用的模型,该模型能够满足大量连接,并能高速完成数据的传送。
另外一个重要的部分就是服务器与客户端的同步问题,当前的网络游戏都要求即时响应,并且所有玩家的信息都要同步,这是网络游戏程序不同于其他网络软件的地方。
本文设计的游戏大厅,都是依照所有操作以服务器为主,所有客户端的操作都要由服务器校验,按同一个节拍来运行,这样既避免了作弊的可能,又能保证游戏世界的数据同步。
不足之处在于如果某台客户端的网速较慢,则导致整个游戏的速度变慢。
游戏的同步问题是最具难度的部分,也是提高性能的关键部分。
本文吸取了前人在网络游戏引擎方面的研究成果,重点对网络游戏引擎的系统结构、如何建立具有可扩展性的服务器平台、负载分配策略、同步机制等关键技术做了深入研究。
本文设计的游戏大厅的框架,具体的功能可以由游戏开发者进行填充,简化了游戏开发的难度,减少了游戏开发的工作量..……
网络游戏服务器端网络引擎的研究与实现
摘要 4-5
Abstract 5
1 绪论 8-16
1.1 网络游戏概述 8-13
1.1.1 网络游戏的发展历史 8-10
1.1.2 网络游戏的分类 10-13
1.2 研究的背景和目的 13-14
1.3 论文主要内容 14-16
2 网络引擎开发相关技术的研究 16-23
2.1 网络通信技术的研究 16-19
2.1.1 通信协议 16-17
2.1.2 客户/服务器编程模型 17-19
2.2 IOCP机制和使用方法 19-21
2.2.1 IOCP机制 19
2.2.2 IOCP的使用方法 19-21
2.3 多线程技术 21-23
2.3.1 线程概念 21
2.3.2 线程与进程的区别 21
2.3.3 线程的使用 21-23
3 服务器端网络引擎架构设计 23-27
4 网络数据高效收发层的设计与实现 27-41
4.1 网络数据高效收发层的设计 27-30
4.1.1 句柄唯一数据结构(客户上下文套接字) 28-29
4.1.2 I/O唯一数据结构(缓冲区) 29-30
4.1.3 CNetServer类 30
4.2 网络数据高效收发层的实现 30-41
4.2.1 内存池的实现 32-34
4.2.2 恶意客户连接 34-35
4.2.3 数据包乱序 35-36
4.2.4 监听线程实现 36-38
4.2.5 服务线程实现 38-39
4.2.6 虚函数接口 39-41
5 网络数据高效处理层的设计与实现 41-55
5.1 网络数据高效处理层的设计 41-42
5.2 网络数据高效处理层的实现 42-47
5.2.1 解包线程的实现 44-45
5.2.2 逻辑数据处理线程的实现 45-46
5.2.3 数据发送线程的实现 46-47
5.3 环行缓存区 47-55
5.3.1 环行缓存区的设计 47-51
5.3.2 环行缓存区的实现 51-55
6 逻辑业务处理层 55-60
6.1 逻辑业务处理层实现说明 55-57
6.2 象棋游戏服务器的实现 57-60
7 实现结果及性能测试 60-64
7.1 实现结果 60-62
7.2 性能测试 62-64
发布一个网络游戏的服务器引擎
辛苦了5~1两个星期的业余时间把一年的构思写了出
现在做点自己想做的事情真难啊,既然不能拿来糊口就开源出来讨点人气吧!
https://sourceforge.net/projects/monstersls/
参考:
1, http://www.chinadogame.com.cn/
2,http://bbs.gameres.com/showthread.asp?threadid=146937
高性能服务器设计
高性能MMORPG通用服务端引擎设计: http://www.cnblogs.com/Alexander-Lee/archive/2010/11/20/ViewOfHightPerformanceMMORPGGameServer.html
无缝世界网游服务器架构的设计:
http://blog.csdn.net/romandion/archive/2009/04/02/4044368.aspx
http://www.cnblogs.com/jack-feng/archive/2011/02/07/1949757.html
服务器架构:
http://www.bairuitech.com/html/xingyezixun/20090528/121.html