to myself 的分类学习日志

做自己想做的事
posts - 232, comments - 6, trackbacks - 0, articles - 0

网游服务器架构

Posted on 2010-09-30 15:46 kongkongzi 阅读(3197) 评论(0)  编辑 收藏 引用 所属分类: game development

 游戏服务器引擎设计
原文地址: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