Erlang最大的优点是方便,很多基础功能都已经集成到Erlang语言中。之前用C++写服务器的时候,管理TCP连接很繁琐,需要写一大堆代码来实现。底层的框架需要写很多代码实现,这样既浪费时间,又会有很多BUG。但是用Erlang就方便多了,底层的一切你都不需要考虑,你只需要考虑,服务器的架构以及业务逻辑。从此让你彻底从底层的泥潭中解脱。我从去年年底开始了解学习Erlang,到现在我已经彻底爱上了Erlang。好了,废话不多说,开始详细介绍下我设计的这个服务器架构吧。
    首先看下整个架构的布局,如下图:
    
    如上图所示,整个架构由四部分组成,分别是连接管理服务器、账号服务器、游戏服务器以及数据服务器。
    连接管理服务器既网关服务器,主要作用是管理与客户端的网络连接,将服务器组与外网隔离。只有连接服务器中会监听网络连接,连接管理服务器与其他类型的服务器器组成Erlang集群。互相之间通过Erlang消息进行同步。连接管理服务器中会有一个负载平衡节点,用来负责对连接服务器中的所有节点做负载均衡。连接服务器中还有N个网关节点,用来管理客户端连接以及消息传递,网关节点的数量通过负载可动态增加。
    账号服务器,管理整个平台的账号,对客户端做登陆验证,如果项目正式上线还要负责充值的工作。账号服务器由N个节点组成,根据负载可动态增加节点数量。整个架构的数据库都采用Erlang自带的Mnesia分布式数据库,这个数据库既可以做永久保存也可以做Cache,对游戏服务器再合适不过了。Mnesia作为数据永久保存方案,唯一的不足是做数据统计不是很方便。像关系型数据库,有很强大的SQL做支持,做统计那是相当的方便。虽然有不足之处,但是带来的好处也是显而易见的,那就是简单,以及天生对分布式的支持。我在这里为什么不选用MySQL之类的数据库,原因就是Mnesia简单易用,正好符合了KISS原则。我信奉的原则就是KISS,只要能实现我需要的功能,那么实现的越简单越好。复杂意味着不可靠,为什么说不可靠呢,可能有些人觉得我太绝对了,在软件项目中人越多那随之带来的各种BUG也就越多。复杂的系统一定要多人的合作才可以完成,这个是不容置疑的。而且每个人对项目的理解不同,对软件开发的理解也不尽相同,虽然可以统一项目组中每个人的代码风格,但是没有办法统一每个人的思考方式。
    游戏服务器,游戏的所有逻辑都在游戏服务器中实现,对于我现在要做的这款飞行类的页游而言,已经足够了。游戏服务器由N个节点组成,根据负载可动态增加节点数量。游戏数据库也是用Mnesia实现,但是和账号数据库是分离的,他们之间不需要知道互相的存在,从上图也可以看出。如果项目到后期变的更复杂,那游戏服务器这里可以分出单独的节点做复杂的计算,甚至可以把这样的节点单独的隔离到其他的物理机,保证游戏的响应速度。
    总结,架构的游戏世界是个统一的游戏世界,所有用户都在同一个世界中。所有服务器中的节点都是通过负载动态增加的,部署的时候可以部署到同一个物理机上也可以部署到不同的物理机上。做了这么多年的C++服务器,感觉用C++写服务器要实现的东西太多了,要考虑的东西也太多了,让人很累。虽然说是为了效率考虑,但是我觉得如果C++代码写不好,最终的效率反而更不好。我认为一个中级的Erlang程序写出来的服务器可以和一个高级的C++写的服务器程序相媲美,但是培养一个Erlang高手和培养一个C++高手的代价显然是不一样的。

同一世界服务器架构--Erlang游戏服务器的更多相关文章

  1. erlang 游戏服务器开发

    http://blog.csdn.net/slmeng2002/article/details/5532771 最近关注erlang游戏服务器开发  erlang大牛写的游戏服务器值得参考 介绍本文以 ...

  2. 深入浅出node.js游戏服务器开发1——基础架构与框架介绍

    2013年04月19日 14:09:37 MJiao 阅读数:4614   深入浅出node.js游戏服务器开发1——基础架构与框架介绍   游戏服务器概述 没开发过游戏的人会觉得游戏服务器是很神秘的 ...

  3. 老出BUG怎么办?游戏服务器常见问题解决方法分享

    在游戏开发中,我们经常会遇到一些技术难题,而其引发的bug则会影响整个游戏的品质.女性向手游<食物语>就曾遇到过一些开发上的难题,腾讯游戏学院专家团Wade.Zc.Jovi等专家为其提供了 ...

  4. Pomelo分布式游戏服务器框架

    Pomelo介绍&入门 目录 前言&介绍 安装Pomelo 创建项目并启动 创建项目 项目结构说明 启动 测试连接 聊天服务器 新建gate和chat服务器 配置master.json ...

  5. SQLServer 服务器架构迁移

    原文:SQLServer 服务器架构迁移 最近服务器架构迁移,将原来的服务器架构迁移到新的服务器,新的服务器在硬件方面比之前更好!原来服务器使用双向同步,并且为水平划分到多个数据库服务器.迁移过程中, ...

  6. 类似于QQ游戏百万人同时在线的服务器架构实现

    http://blog.csdn.net/sodme/article/details/213995 —————————————————————————————————————————————————— ...

  7. QQ游戏百万人同时在线服务器架构实现

    转载自:http://morton5555.blog.163.com/blog/static/976407162012013112545710/# QQ游戏于前几日终于突破了百万人同时在线的关口,向着 ...

  8. [转]MMORPG服务器架构

    MMORPG服务器架构 一.摘要 1.网络游戏MMORPG整体服务器框架,包括早期,中期,当前的一些主流架构2.网络游戏网络层,包括网络协议,IO模型,网络框架,消息编码等.3.网络游戏的场景管理,A ...

  9. MMORPG服务器架构

    MMORPG服务器架构 一.摘要 1.网络游戏MMORPG整体服务器框架,包括早期,中期,当前的一些主流架构2.网络游戏网络层,包括网络协议,IO模型,网络框架,消息编码等.3.网络游戏的场景管理,A ...

随机推荐

  1. luogu 1325 雷达安装

    题目链接 题意 在\(x\)轴上方有\(n\)个海岛,要在\(x\)轴建雷达,每个雷达的覆盖范围为半径为\(d\)的圆,问至少要建多少个雷达能覆盖所有海岛. 思路 对于每个海岛计算出雷达建立在什么范围 ...

  2. 【MFC】MFC中使对话框变成圆角矩形的代码(转)

    原文转自 http://blog.csdn.net/cracent/article/details/48274469 BOOL CLoginDlg::OnInitDialog() { CDialog: ...

  3. RTSP、 RTMP、HTTP的共同点、区别(转)

    共同点: 1:RTSP.RTMP.HTTP都是在应用层. 2:理论上RTSP.RTMP.HTTP都可以做直播和点播,但一般做直播用RTSP.RTMP,做点播用HTTP.做视频会议的时候原来用SIP协议 ...

  4. Delphi 之Copyrect的使用

    http://cqujsjcyj.iteye.com/blog/380970 Copyrect的使用(图片复制.放大.以及做图片放大镜等)一.从一个选取一个区域中的图象到另一个图象组件中的固定区域pr ...

  5. js-浅显基础-正则表达式集

    今天进博客园,忽然发现我也是有粉丝的人啦!!!!!!!!谢谢谢谢关注(爱心爱心) 本来不想做这个笔记的,但是每次都百度我自己都烦死了,所以还是自己整理一下方便我后期使用: 独笑笑不如众笑笑,放轻松点 ...

  6. 洛谷—— P1440 求m区间内的最小值

    https://www.luogu.org/problemnew/show/P1440 题目描述 一个含有n项的数列(n<=2000000),求出每一项前的m个数到它这个区间内的最小值.若前面的 ...

  7. codevs——1814 最长链

    1814 最长链  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description 现给出一棵N个结点二叉树,问这棵二叉 ...

  8. springboot idea激活指定profile

    多Profile文件 配置文件编写的时,可以是application-{profile}.properties/yml,默认使用application.properties的配置: 激活指定profi ...

  9. Java中判断String对象是否为空的方法

    Java原生的方法: String对象中有一个isEmpty的方法判断是否为空,其实isEmpty完全等同于string.length()==0,注意如果String本身是null,那么使用strin ...

  10. sqlite数据库转换为mysql数据库

    SQLite工具我用的SQLiteStudio2.1.5 下载地址 http://sqlitestudio.pl/?act=download SQLiteStudio打开数据库文件,点工具->导 ...