游戏服务器,是一个会长期运行程序,并且它还要服务于多个不定时,不定点的网络请求。所以这类服务的特点是要特别关注稳定性和性能。这类程序如果需要多个协作来提高承载能力,则还要关注部署和扩容的便利性;同时,还需要考虑如何实现某种程度容灾需求。由于多进程协同工作,也带来了开发的复杂度,这也是需要关注的问题。

游戏服务器架构要素

对于游戏服务端架构,最重要的三个部分就是,如何使用CPU、内存、网卡的设计:
- 内存架构:主要决定服务器如何使用内存,以最大化利用服务器端内存来提高承载量,降低服务延迟。
- 逻辑架构:设计如何使用进程、线程、协程这些对于CPU调度的方案。选择同步、异步等不同的编程模型,以提高服务器的稳定性和承载量。可以分区分服,也可以采用世界服的方式,将相同功能模块划分到不同的服务器来处理。
- 通信模式:决定使用何种方式通讯。基于游戏类型不同采用不同的通信模式,比如http,tcp,udp等。

游戏类型

卡牌跑酷等休闲游戏弱交互游戏

分区分服RPG游戏(RPG页游)

分服模型是游戏服务器中最典型,也是历久最悠久的模型。在早期服务器的承载量达到上限的时候,游戏开发者就通过架设更多的服务器来解决。这样提供了很多个游戏的“平行世界”,让游戏中的人人之间的比较,产生了更多的空间。其特征是游戏服务器是一个个单独的世界。每个服务器的帐号是独立的,每台服务器用户的状态都是不一样的,一个服就是一个世界,大家各不牵扯。
后来游戏玩家呼吁要跨服打架,于是就出现了跨服战,再加上随着游戏的运行,单个服务器的游戏活跃玩家越来越少,所以后期就有了服务器的合并以及迁移,慢慢的以服务器的开放、合并形成了一套成熟的运营手段。目前多数游戏还采用分服的结构来架设服务器,多数页游还是采用这种模式。

数据共享游戏服务器


网关部分分离成单端的gate服务器,DB部分分离为DB服务器,把网络功能单独提取出来,让用户统一去连接一个网关服务器,再有网关服务器转发数据到后端游戏服务器。而游戏服务器之间数据交换也统一连接到网管进行交换。所有有DB交互的,都连接到DB服务器来代理处理。

  • 场景服务器:它负责完成主要的游戏逻辑,这些逻辑包括:角色在游戏场景中的进入与退出、角色的行走与跑动、角色战斗(包括打怪)、任务的认领等。场景服务器设计的好坏是整个游戏世界服务器性能差异的主要体现,它的设计难度不仅仅在于通信模型方面,更主要的是整个服务器的体系架构和同步机制的设计。
  • 非场景服务器:它主要负责完成与游戏场景不相关的游戏逻辑,这些逻辑不依靠游戏的地图系统也能正常进行,比如公会聊天或世界聊天,之所以把它从场景服务器中独立出来,是为了节省场景服务器的CPU和带宽资源,让场景服务器能够尽可能快地处理那些对游戏流畅性影响较大的游戏逻辑。
  • 网关服务器: 在类型一种的架构中,玩家在多个地图跳转或者场景切换的时候采用跳转的模式,以此进行跳转不同的服务器。还有一种方式是把这些服务器的节点都通过网关服务器管理,玩家和网关服务器交互,每个场景或者服务器切换的时候,也有网关服务器统一来交换数据,如此玩家操作会比较流畅。

房间游戏


房间类玩法和MMORPG有很大的不同,在于其在线广播单元的不确定性和广播数量很小。而且需要匹配一台房间服务器让少数人进入一个服务器。
这一类游戏最重要的是其“游戏大厅”的承载量,每个“游戏房间”受逻辑所限,需要维持和广播的玩家数据是有限的,但是“游戏大厅”需要维持相当高的在线用户数,所以一般来说,这种游戏还是需要做“分服”的。典型的游戏就是《英雄联盟》这一类游戏了。而“游戏大厅”里面最有挑战性的任务,就是“自动匹配”玩家进入一个“游戏房间”,这需要对所有在线玩家做搜索和过滤。
玩家先登录“大厅服务器”,然后选择组队游戏的功能,服务器会通知参与的所有游戏客户端,新开一条连接到房间服务器上,这样所有参与的用户就能在房间服务器里进行游戏交互了。

游戏服务器的常用架构相关推荐

  1. 学习游戏服务器开发必看,C++游戏服务器开发常用工具介绍

    C++游戏服务器开发常用工具介绍 在软件开发过程中需要使用的工具类型实属众多,从需求建模到软件测试,从代码编译到工程管理,这些工具都对项目有着不可替代的作用.庄子有云,"吾生也有涯,而知也无 ...

  2. 大牛唐健,带你领略游戏服务器与后台架构的奥妙

    游戏后台的架构以及服务器系统是大型游戏开发中一个不可或缺的部分,本期的Live问答栏目中,我们有请到了腾讯互娱服务器专家工程师,腾讯天美工作室技术总监唐健围绕后台架构和分布式系统内容与大家展开分享与讨 ...

  3. win10系统做游戏服务器吗,win10架构游戏服务器

    win10架构游戏服务器 内容精选 换一换 弹出"创建推理服务"窗口.设置基础配置信息,然后单击"下一步".基础配置信息参数名称参数说明基础配置名称1-50个字 ...

  4. 深入浅出Node.js游戏服务器开发--分布式聊天服务器搭建

    From: http://www.infoq.com/cn/articles/game-server-development-2?utm_source=infoq&utm_medium=rel ...

  5. python游戏服务器框架_mqant首页、文档和下载 - Golang/python语言开发的分布式游戏服务器框架 - OSCHINA - 中文开源技术交流社区...

    mqant mqant 是一款基于 Golang 语言的简洁,高效,高性能的分布式游戏服务器框架,研发的初衷是要实现一款能支持高并发,高性能,高实时性的游戏服务器框架,也希望 mqant 未来能够做即 ...

  6. 游戏服务器框架之跨服(一)

    如今的游戏开发,不搞个跨服玩法都不好意思说在做游戏了(当然,也跟游戏类型有关,一些轻度休闲游戏可以排除在外).跨服玩法的设计,可以进一步激发玩家追求高战力的虚荣心,也可以汇聚玩家数量,避免单服日活跃低 ...

  7. 浅谈游戏服务器---功能模块上来看

    游戏服务器在网游上的作用不容考虑,游戏能做大到什么程度,还是有很大的依靠的,这篇文章先从功能模块的角度来谈一个完善的游戏服务器需要实现哪.     一:游戏服务器的作用:连接各个网游客户端,实现各客户 ...

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

    本文阅读预计需要10分钟,主要技术点来如下,感兴趣请继续: 游戏服务器特征 短连接游戏服务器架构 长链接游戏服务器架构 分区分服服务器架构 MMOARPG服务器架构 房间服务器架构 一.游戏服务器特征 ...

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

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

  10. 集群式游戏服务器架构方案设计开发

    自从2003年开发VOIP Radius Server以及修改Gnugk以来,从事服务器开发已经近五年了,对服务器开发也有一些自己独到的看法以及见解.当摆脱了技术本身的束缚之后,才理解重要的并不是某种 ...

最新文章

  1. matlab 文件名分离_MATLAB偏微分方程
  2. python函数返回多个变量_Python 3:通过多个函数返回变量
  3. [深度学习] 自然语言处理---Transformer 位置编码介绍
  4. 有关DataVisualization类组件的研究——Silverlight学习笔记[43]
  5. Java实现正整数数组的最小拼接数
  6. 开源开放的知识图谱工具和数据生态
  7. FFmpeg源代码结构图 - 编码
  8. 技术支持诈骗手段翻新:借勒索软件类锁屏界面恐吓用户
  9. 软件设计师考试详细介绍(最全)
  10. 全志a20 开发板 linux,全志A83T开发板SDK资料,A20/A31S升级,QT5,Android5.1,Lubuntu
  11. 在w ndoWS7中屏幕保护程序,怎么设置Windows 7屏幕保护时间
  12. python爬虫之使用urllib模块实现有道翻译功能
  13. Win10更新补丁错误代码0x80070643解决方法
  14. hive改表结构的两个坑
  15. 英语语法 定冠词与专有名词
  16. Android 听筒模式和扬声器模式切换的 实现
  17. RBF(径向基)网络
  18. 机器学习系列(3)_逻辑回归应用之Kaggle泰坦尼克之灾
  19. 琼斯是计算体心立方弹性模量_固体物体第三章习题
  20. 计算机原理---什么叫协议?主流协议族TCP/IP协议与HTTP协议的联系及区别

热门文章

  1. AI 成野生动物保护神:没有图像识别算法,考拉可能灭绝!
  2. ESP32 485光照度
  3. 机器学习数学篇—基础数学知识清单
  4. 服务器维护表格,服务器维护表格
  5. 产品思考 - 不剪发的Tony老师
  6. yum 碰到的问题与解决办法
  7. UOS/Deepin 常用文本代码编辑器推荐及安装
  8. 西门子plc200 c语言转换,西门子S7-200 系列PLC量程转换及编程方法
  9. CityEngine中如何导出带有属性信息的slpk
  10. 用python玩微信(聊天机器人,好友信息统计)