zoukankan      html  css  js  c++  java
  • (转)简单实用的网游服务器架构

    此文并不是聚润堂所在公司当前运营的网游游戏服务器架构,而是在看过了近十个商业网游的架构,在现阶段心目中规划的简单实用的网游服务器架构。

    网游的本质是人和人之间关系,人越多,关系越多,越能把人留住。开服头三天,人数是最多,为了保证一个月后,玩家等级达到一定的等级,策划的玩法都可以完全展开,单组服务器容纳人数越多越好,如果是PVE结构的游戏,最好能容纳1万人左右。这样在一个月后流失率50%的情况下,还有5000人左右在一组服务器内,已经产生比较强大的社会结构,各种高级玩法才有进行的基础。如果是PVP洗用户的游戏,容纳人数越高越好。两款较好的国战游戏,《征途》达到了每组4万人,《成吉思汗》,推测至少也达到了两万人。

    采用完美常用的分线结构,运营到后期,就会出现每线人数较少,线内,线和线之间都互动不起来。但如果不分线,在开服一刹那,用户全部堆积在同一个新手村,基本玩不动。《天龙八部》提出了较好的解决方案,建立多个平行的新手村地图,一主多副,开服时尽可能多的同时容纳新用户的涌入,高等级玩家从其它地图回新手村只能到达主新手村。

    下图中每个方框表示一个独立的进程APP组件,每个服务进程如果发生宕机会影响部分用户,整体服务但不会全部中断。在宕机进程重启后,又可以并入整体,全部服务得以继续。

    图片附件

    按此在新窗口浏览图片

    gls:game login server,游戏登录服务器,某种程序上,其不是核心组件,gls调用外部的接口,进行基本的用户名密码认证。此外需要实现很多附属的功能:登录排队(对开服非常有帮助),GM超级登录通道(GM可以不排队进入游戏),封测期间激活用户控制,限制用户登录,控制客户端版本等。

    db:实质上是后台sql的大内存缓冲,隔离了数据库操作,比较内存中的数据,只把改变的数据定时批量写入sql。系统的算法,开发稳定性都要求非常高。

    center:所有组件都要在这里注册,在线玩家的session状态都在这里集中存放,和各组件有心跳连接。所有对外的接口也全部通过这里。

    角色入口:玩家登录游戏后的选择角色

    gs:game server,最核心组件,同一地图,所有游戏逻辑相关的功能,都在这里完成。

    gate:建立和用户的常链接,主要作sockt转发,屏蔽恶意包,对gs进行保护。协议加密解密功能,一个gate共享多个gs,降低跳转地图连接不上的风险。

    IM,关系,寄售:表示其它组件,负责对应的跨地图发生全局的游戏逻辑。

    细节是魔鬼。此架构简单、清晰、明了,和其它网游架构相比其实没有什么本质的区别。团队的代码开发能力,项目管理能力才是关键。一个gs承担能力有限,在现在硬件环境下,一个有经验的开发人员,一个gs应该能达到1500人的上限。整个架构的上限,瓶颈在center调度压力,db的读写压力。

    引用一段深以为然的话做结束:
    ==========
    http://blog.csdn.net/lfhfut/archive/2010/04/14/5483266.aspx

    4。游戏开发并没有什么高深的技术

    首先需要明确的一点,游戏项目是工程项目,不是科研项目。

    工程项目的目的是在有限的人力跟财力之下实现出既定的需求,而这个需求从前面的分析可以知道,要求并不高,所以,需求的实现过程也就并没有多么高深。

    至少在我经历过的项目里,没有什么惊天地泣鬼神似的英雄人物,没有创造出多么伟大的算法,我们所做的,只是使用现在的技术,现有的方法,拼合成一个软件产品,一个融合了程序、美术、策划劳动力的软件产品。

    游戏开发的过程里,没有,也不需要多厉害的技术高手,需要的仅仅只是有耐心,有责任心的普通技术人员。
    ===========
    最后赞一句:Dia真是跨平台画流程图的好软件,聚润堂的日常使用中已经完全替代了Visio。

    参考:

    白云哥的blog
    http://blog.csdn.net/lfhfut/archive/2007/09.aspx

    一种经典的网络游戏服务器架构 
    http://www.cppblog.com/johndragon/archive/2008/04/10/46768.html

    传奇3的架构图
    http://bbs.gameres.com/showthread.asp?threadid=47752&page=10
    185楼,187楼,分了两部分。聚润堂把其[来源:GameRes.com]合在一起方便查看


    按此在新窗口浏览图片 
  • 相关阅读:
    Service Workers里的CacheStorage和Cache
    application cache和localstorage的区别
    localStorage和sessionStorage区别
    Ubuntu软件的安装和使用
    C++之数据类型
    C++之C++的词法单位
    C++之语言概述
    Ubuntu双系统无法挂载Windows10 硬盘的解决方法
    opencv 显示摄像头数据
    Ubuntu 中使用git 上传代码
  • 原文地址:https://www.cnblogs.com/lancidie/p/1927028.html
Copyright © 2011-2022 走看看