首先, 游戏服务器是IO密集型服务器,它的主要瓶颈在网络IO,而不是CPU,这点要记住了 。所以经常服务器问题都会出现在网络IO,带宽,数据库磁盘读写上面,而非CPU上面。

其实全球同服也就是大量在线嘛,比如C1000k,甚至更多。同服,只是你看起来同服,而不是他本身就在同一个服务器上,或者同一个进程上,这是完全不现实的。一个好的服务器进程,能同时承载10k的游戏玩家(还依赖于游戏逻辑复杂度)已经不错了。其实要全球同服,就是堆服务器进程嘛。
讲一下我用过的其中一种架构模型,也是公司按着bigworld架构设计的:
1.Gate:首先要有一个(多个)Gate(网关)服务器,负责客户端连接及消息转发到GameServer(游戏服)(选服逻辑),保持客户端到服务端的连接
没有任何逻辑,只做消息加密和解密,以及客户端和服务器消息的转发(相当于两者之间的桥梁).
2.GameServer:GameServer是主要的游戏进程,提供游戏逻辑功能(采用单进程(或者单线程)模型,游戏服务器的瓶颈从来不在CPU,所以只做逻辑功能的话单线程足够了,在这里没必要用多线程或多进程)。
3.DBManager:实现数据库的读写,方便Game服务器异步读写数据库的数据(有些把数据库读写放在游戏服,没有单独的服务器,那恐怕游戏服单进程就不够用了)。
4.GameManager:负责管理所有的GameServer,GameServer之间消息转发,提供广播到所有Game的功能。

客户端连Gate,Gate连GameServer,GameServer连DBManager,GameManager管理所有的GameServer并通知所有的Gate。

除了GameManager只有一个,理论上Gate,GameServer,DBManager都可以扩展到多个实例,你要实现全球唯一服,理论上就是扩展GameServer,那么怎么让他们看起来在一个服呢?其实很简单,COC大多数都是单服玩法,只有交互玩法的时候你才能感受到它是同一个服。

主要讲讲GameServer ,这是主要的处理服务器逻辑的地方,一般单进程就可以了,一个epoll_wait
hold住全场,然后做分发,理论上cpu都能承载的住,而epoll能处理的上限,一般跟机器的内存有关,远大于1024,正常的也达到100k,当然考虑到逻辑的复杂度,一个实例一般处理的连接接近10k就可以了。
那怎么处理100k,1000k甚至更多了,那就多个实例,那这样还是唯一服吗?是的,至少可以看起来是,游戏自然有单人玩法和多人玩法,单人玩法自然自己在自己的服就可以了,谁也不知道是不是跟别人一个服。
当然有全服的排行榜,好友系统之类的怎么办呢 ,其实很简单,我们不是有GameManager吗,它就是负责做这事的,每当你发个好友请求,GameManager广播一条消息,然后如果有某个GameServer存在这个玩家,那就回应你,你们就可以相互通信了,更简单的想办法获取玩家的服务器ID号,直接通过GameManager转发给那个服务器,自然就可以通信了,就像在同一个服务器一样。
排行榜呢,最简单的,指定一个服务器,或者单独开辟一个服务器做排行榜,所有数据变动都通知这个服务器,然后服务器自然就能排行了,然后再广播。
双人战斗或者多人副本呢?
像COC这样的,掠夺战,我们当时的做法就是,直接搜到敌方,然后把自己的玩家,士兵军队等需要的数据序列化之后,传到对面的服务器去,反序列化,然后直接开打,打完再把数据传回来。
更多人的呢,那就方便点,再开辟一类服务器,叫BattleServer,专门负责多人玩法,副本玩法之类的,多人的时候,把所有的多人数据迁移到BattleServer,然后多人(副本玩法)结束的时候,再通过GameManager把数据迁移回原来的服务器。

这样看,其实全球唯一服也就没有那么高大上了。

如果有兴趣,可以看看KBEngine服务器引擎,作者按照bigworld架构设计的,可以满足你的要求。

全球同服--coc类游戏服务器架构相关推荐

  1. 棋牌类游戏服务器架构全面总结

    一.棋牌类服务器的特点 1,棋牌类不分区不分服 一般来说,棋牌游戏都是不分区不分服的.所以棋牌类服务器要满足随着用户量的增加而扩展的需要. 2,房间模式 即在同一局游戏中就是在同一个房间中,同一个房间 ...

  2. 大型MMO-SNS类游戏服务器架构

    SNS类型的游戏和RPG类的网游有一些不同的特点,而这些特点会导致这类游戏的后台架构和RPG网游的后台架构存在一些区别. SNS类型的游戏一般有以下的特点: (1)所有的玩家角色可能存在交互 SNS类 ...

  3. 全球同服 游戏服务器架构设计

    著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:马剑飞 链接:https://www.zhihu.com/question/31103751/answer/6463111 ...

  4. 如何设计大型游戏服务器架构?

    一.游戏服务器特征 游戏服务器,是一个会长期运行程序,并且它还要服务于多个不定时,不定点的网络请求.所以这类服务的特点是要特别关注稳定性和性能.这类程序如果需要多个协作来提高承载能力,则还要关注部署和 ...

  5. 游戏服务器架构演进(完整版)

    http://gad.qq.com/article/detail/32876 ​这是王者荣耀技术分析系列第三篇,有兴趣请持续关注我的blog和公众号. 1.像<王者荣耀>一样红过 2.从& ...

  6. 大型游戏服务器架构该怎么设计?

    一.游戏服务器特征 游戏服务器,是一个会长期运行程序,并且它还要服务于多个不定时,不定点的网络请求.所以这类服务的特点是要特别关注稳定性和性能.这类程序如果需要多个协作来提高承载能力,则还要关注部署和 ...

  7. 如何设计大型游戏服务器架构? 1

    一.游戏服务器特征 游戏服务器,是一个会长期运行程序,并且它还要服务于多个不定时,不定点的网络请求.所以这类服务的特点是要特别关注稳定性和性能.这类程序如果需要多个协作来提高承载能力,则还要关注部署和 ...

  8. 游戏服务器架构的演化

    转载自https://www.cnblogs.com/hwcs/p/7203605.html,没看到是否允许转载,侵删. 我是一个不怎么玩游戏的人,特别是那种大型的网络游戏,但最近由于接触一些游戏相关 ...

  9. bigworld游戏服务器架构参考

    http://www.cnblogs.com/GmrBrian/p/3777074.html https://www.zhihu.com/question/29779732 https://www.z ...

最新文章

  1. Python爬一下抖音上小姐姐的视频~
  2. php json encode html,php – json_encode不能使用html字符串作为值
  3. 第一阶段冲刺最后一天
  4. 利用Matlab求解线性规划问题
  5. java file取不到linux文件_Java中高级核心知识全面解析——Linux基本命令(切换、增删改查、压缩文件、权限命令)...
  6. nginx 重定向_虚拟机中安装nginx,重定向到resin
  7. form-validation-engine中的正则表达式
  8. android DatePicker
  9. ps去水印教程_ps去水印教程,详细解析五种去水印的方法
  10. Outlook 2013 电子邮件账户设置备份与恢复
  11. Docker 概念-1
  12. 机器学习库线性回归代码_PyCaret回归:更好的机器学习库
  13. 05-1_部署 master 节点
  14. 人生路上好文章[收藏]
  15. c语言开发的cli,Package - cyy-cli
  16. 来个模态kuang_使用 React 制作一个模态框
  17. windows下、Linux下最好用markdown查看器:Typora(查看.md文件)
  18. Jenkins 通过SSH将文件发送到远程服务器
  19. 关于薪水保险金的那些事
  20. moby_如何使用Moby Dick探索以主题为主题的开源项目的深度

热门文章

  1. 阶乘java_Java中求阶乘的算法
  2. Spring Boot Starters启动器的简介说明
  3. c语言中如何判断文件是否存在
  4. 大数据Spark SQL慕课网日志分析
  5. Spark Idea Maven 开发环境搭建(转载)
  6. CADD+AIDD与深度学习基因组学学习
  7. Django实战(8)——在线人脸识别系统demo(对接Redis、初步实现人脸识别功能)
  8. python pandas数据清洗_Pandas进行数据清洗的方法介绍
  9. NBA2k 1.01
  10. 延缓写入失败计算机硬件,延缓写入失败