去年从传统软件公司辞职,下定决心转互联网,由于对游戏的热爱,去了一家游戏公司,待了将近10个月,参与开发了一款动作卡牌手游,游戏最终也上线了。最近抽空写写过去对游戏后端的一些感想吧。最近又去另外一家游戏公司,参与开发一款MMO手游。准备开始从动作卡牌手游谈到MMO手游,也算是对游戏开发的一些感悟。

动作卡牌游戏,相对而言,时延性要求没有那么高,所以架构没有那么复杂,不过也是值得学习的。本文重点介绍卡牌游戏的架构。

整个后端架构分成5个主要模块,后面新增2个模块,主要用于跨服对战。

整个游戏的架构如上图所示。

每个区服对应这样一组进程:

loginserver、dbserver、gameserver、worldserver,gmserver,然后matchserver和pvpserver用于跨服系统。

各个进程间通信使用socket,通信协议采用protobuf,对消息包进行序列化和反序列化。账号数据以及打点日志信息存放在mysql,角色数据存放在redis中。这边这样设计的原因是,角色数据要求时延性高,并且是经常写入,因此采用redis可以提高吞吐量,而账号数据以及日志信息是基本不变动的,而且采用mysql基本满足需求,并且稳定性比较高,还方便运营后台维护。这边可以优化的地方是可以把日志单独拎出来,做成一个日志服务器。

下面简单介绍下各个模块功能,后续会继续分析这样设计的意义,以及实现的功能。

loginserver:登录服务器,主要有二种,第一种是中心登录服,所有的客户端连接这个服务器获取服务器列表信息,第二种是普通登录服,用于选择区服之后的登录验证。

gameserver:逻辑服务器,管理游戏的基本逻辑,包括各个基本系统。

worldserver:世界服务器,管理游戏的一些数据,包括门派数据,竞技场,世界boss等数据。

dbserver:数据库服务器,主要管理mysql,包括登录验证以及日志打点入库。

gmserver: GM服务器,一般只有一个(可做成多节点),主要用于运营后台的管理,包括邮件的发送,道具发

送等等功能。

matchserver:一般只有一个(可做成多节点),主要用于跨服系统的匹配,以及监控pvpserver服务器。

pvpserver:用于管理跨服战场,和gameserver采用同样的代码,只是初始化不一样。

这个动作卡牌游戏的架构基本上是这样,主要是单服的人数不会太高,所以这样的架构基本上能满足实际需求。

这个游戏单区服最高在线人数一般不会超过5000,所以这样的设计完全合理。如果是MMO游戏,架构上将会有很大

的不同。后面将会对一些比较重要的地方如登录流程、网络底层、战斗系统、跨服系统等进行重点分析,并且给出

一些优化方案。

游戏服务端开发浅谈(一)相关推荐

  1. 游戏服务端开发浅谈(二)

    本系列准备重点介绍MMO游戏,之前本来打算把卡牌游戏简单介绍下,但是经历过MMO游戏开发之后,发现MMO游戏的架构可以适用于很多类型的游戏.本文先介绍支持单服支撑2万人以下的经典架构.学习不能好高骛远 ...

  2. 速游面经(游戏服务端开发工程师)

    一面:9.15,线下面 一面更像HR面,是一个女面试官,应该是HR,不是技术官,问的专业知识也很浅,没有深挖 我们这个这个岗位是需要转语言的,可以接受吗?(转Erlang) 你的GPA挺高的,平时是怎 ...

  3. 百万在线:大型游戏服务端开发

    进入手游时代,服务端技术也在向前演进.现代游戏服务端既要承载数以万计的在线玩家,又要适应快速变化的市场需求,因此,如何设计合适的架构就成了重中之重.服务端技术并不简单,作为服务端新人,全面掌握服务端技 ...

  4. Java游戏服务端开发系列文章

    已经好久没有更新自己的学习状态.或许是工作太忙吧,生活被工作羁绊,无法抽身.最近因为某些事情的原因,工作上有点充裕的时间来分享自己的一点小小经验.因为毕竟我也是一个混迹职场几年了 虽然天资不咋地,但是 ...

  5. Java游戏服务端开发之开课了

    从今天开始我将会重新的做一个专栏.这个专栏是专门为新手讲解游戏服务端开发的文章系列.同时也是将自己多年的经验做一个系统的分享. 通过这个系列大家可以掌握到一个游戏开发中的一些概率以及在线游戏服务器所包 ...

  6. 游戏服务端开发-排行榜

    开头 排行榜几乎是每个网络游戏都有的系统,以下用Erlang以例,分享一种排行榜实现方式. 结构 每个排行榜对应一个actor,State使用如下结构: %% 通用排行榜结构 -record(rank ...

  7. docker mysql开发环境_跟我一步一步用Docker搭建Beimi游戏服务端开发环境

    跟我一步一步用Docker搭建Beimi游戏服务端开发环境 Stone 摘要 本文为java 0基础的小伙伴介绍如何用Docker搭建开发环境.如果不关心过程直接可 跳到本文最后取代码. 关键步骤为: ...

  8. 游戏服务端开发-AOI-九宫格法解析(附代码)

    1-啥是AOI AOI全称Area Of Interest,中文就是感兴趣的区域,个人理解就是玩家关注的并且可视的地图区域. 在RPG游戏中,玩家角色移动,攻击,放技能等操作都需要向其他玩家广播,但服 ...

  9. 游戏服务端开发-全局唯一ID

    结构 | PlatId (10bit) | ServerId (12bit) | UnixTime(s) (32bit) | IncreaseId (10bit) | | 平台id (10bit) | ...

最新文章

  1. HEOI2017游记
  2. Zend framework重定向的方法
  3. python第三十课--异常(raise关键字)
  4. IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boo
  5. sql server 怎么把视图中的数据存到另外一张表中_承上篇,自制插件优化Kep数据存储问题...
  6. Preparation for International Women's Day
  7. MOSS2010站点大文件上传设置
  8. Akka(9): 分布式运算:Remoting-远程构建式
  9. 蓝桥杯第五届省赛JAVA真题----n级台阶
  10. 2018-5-22-Python全栈开发day9-Python开发课程简介part2
  11. 【BZOJ2844】albus就是要第一个出场,线性基
  12. Android中style和theme的区别
  13. 速成pytorch学习——9天构建模型的3种方法
  14. 作为一位75后的职场宝妈
  15. Android下pm命令详解
  16. java代码示例(6-2)
  17. PHP textarea防止拖动,textarea dom元素 防止滚动冒泡
  18. 同济大学计算机直博生条件,同济大学攻读博士学位研究生培养工作规定(2016年修订).doc...
  19. 手机常见分辨率及代表机型
  20. H5如何实现唤起APP

热门文章

  1. hover 鼠标悬浮改变样式
  2. 第二届全国高校“一带一路”知识竞赛答案
  3. 第二届赣网杯WEB第一题WP
  4. Python的基础语法(七)(持续更新)
  5. Excel:创建级联下拉菜单
  6. 嵌入式linux 国嵌,[嵌入式Linux学习]国嵌嵌入式视频1
  7. 便签app下载 手机便签app推荐下载
  8. Marathon 服务发现及负载均衡 marathon-lb
  9. 美国访问学者签证的资金证明如何开?
  10. 百度绿萝算法2.0推出的背后