说起游戏服务端引擎,大家会想起Skynet、KbEngine、Photon、Pomelo等等。在探索服务端技术时候,我们不仅仅要了解当代服务端引擎,更要有些前沿眼光,去预测未来的游戏服务端是什么样的。因为只有把握了技术的发展趋势,才能在下一波潮流中立足,甚至成为引领者。

在此,华章计算机特别邀请《百万在线:大型游戏服务端开发》的作者罗培羽分享他对游戏服务端框架发展趋势的看法。

分享嘉宾罗培羽是广州四三九九公司的技术主管,拥有丰富的游戏开发经验。著作《Unity3D网络游戏实战》被多家高校选用作为教材,新作《百万在线》在上市两周后即登顶京东游戏类新书版TOP1,对等多个前沿领域都保持着持续的跟进。

第1代:操作系统功能库

要探索游戏服务端框架的未来,就要先探究游戏服务端框架的演进过程。在此,我从“功能抽象”的角度,将当前的游戏服务端分成层3个世代。

第1代服务端框架是对操作系统功能的封装,如果把网络库也当做框架的话,那么像muduo、libevent、pomelo可以称作第1世代的框架。他们的特点是基于某种语言,对操作系统所提供的功能做出封装,使它更容易使用。下页PPT展示的是linux下网络多路复用的一个接口epoll_ctl,它实则包含了6个设置项,使用起来很麻烦。第1代框架会对它做封装,使得易用一些。有些框架还会针对不同的平台,提供统一的接口,例如在linux下使用epoll、在windows使用IOCP,使得服务端可以运行在多种平台上。

第1代服务端仅仅是对操作系统功能的封装,它的抽象层次相对低,但对应的它更为通用。这类框架往往会提供网络模块、数据库模块、日志模块,封装一些常用功能,规定一套协议格式。如下图所示,框架(绿色部分)提供了一些基本功能,任何游戏相关功能都需要用户自己去实现。


第2代:计算资源抽象模型

Skynet是典型的第2代服务端框架,它的特点是将硬件资源做出一层抽象,使得更符合游戏内容的表达。线程算是操作系统对CPU资源的分割的最小单位,线程切换、新建线程的任有一定的性能开销,所以一台普通物理机一般只能同时支持数百个线程。Skynet模拟了Actor模型,它可以支持数千个Actor并发运行,某种程度上看是对计算资源的抽象。

通过资源抽象,Actor模型能够更好的表达游戏元素。例如要开发一款斗地主游戏,如果用一条操作系统线程来处理一张桌子的逻辑,那一台物理机只能支撑数百台桌子,也就是一两千个玩家同时在线。而如果每条线程处理多台桌子的逻辑,那每条线程将抽象成“桌子集合”,“桌子集合”是个妥协的概念,出于计算机性能考虑而强行划分的游戏元素。而如果使用Actor模型,可用一个Actor表示一台桌子,更接近原始的游戏元素。

第3代:游戏元素抽象模型

角色扮演、开房间战斗(部分射击游戏、竞技游戏……)等类型的游戏都具有“角色在场景中”的特点,服务端底层可以进一步抽象,把所有事物归结为实体和空间两大类。

下图PPT展示的是类BigWorld的架构,服务端划分成了Base、Ceil等不同类型的进程,Ceil是一种管理场景的进程,图中Ceil1包含森林、村落两个场景(空间),Ceil2包含沼泽场景;角色(实体)A和B在森林中。由于服务端多做了一层抽象,服务端框架便能够提供“角色行走”“切换场景”“感兴趣区域”“无缝大地图”的功能,方便开发者使用。

在同一个抽象层级上,不同框架选择不同的语言,不同的技术方案,有些性能较好、有些更容易使用,但它们能够提供的功能还算较为相似。下一代游戏服务端框架,一定会采用更进一层的抽象模型,在此,我认为会有两个方向,其一是对集群计算资源的抽象,其二是对不同类型游戏做进一步的抽象。

第4代1:集群操作系统上的框架

如今一般意义上的操作系统会将CPU、内存等概念做抽象,让用户不必关心程序代码是运行在哪个CPU核心上,也不必关心变量存储在内存中的哪个位置。而当前游戏的分布式系统,大多只是单机系统的叠加。

随着集群系统的演进,未来会出现针对集群的操作系统(当前K8S有此潜力),会抽象集群中的各种资源,让用户不必关心程序代码是跑在哪一台机器上,开发者能够灵活掌控整个集群。与之对应,会出现针对分布式集群的语言和编程模式。在集群基础上去构建的框架会与单机框架不同。

集群系统的一个难点是无法抹平机器间的差异。例如Skynet作者曾在博客中写到“任何抹平节点间差异的尝试都要谨慎”,因为集群间更容易出现网络中断、部分机器故障,不能把集群的通信类同于单机内的通信,此外,集群间的事务也受到了CAP理论的限制,往往需要根据需求在性能和可靠性之间权衡,没有放之四海而皆准的方案。

然而,无法抹平节点差异,这是当前的现实的问题,但它未必会是未来的问题。在单机中,L1储存和L2存储存的性能和可靠性也存在很大差异,初期开发者需要考虑这些差异才能编写性能优良的程序,而现在,开发者并不需要关心多级缓存的存在,操作系统和编译器会自动处理好各种寄存器调用,效率很也高。以此类推,未来我们也许可以找到一种合适的抽象模型,让集群程序与单机程序无差异运行。

所以,下一代服务端框架的一个着眼点,在于集群操作系统上。

第4代2:不同类型游戏的框架

游戏类型繁多,统一的抽象很难,诸如BigWorld也只是将游戏元素划分为实体和空间两种主要元素。如果要进一步抽象,就需要对游戏类型做细分。例如出现专门针对SLG的框架,提供SLG所需的大地图、军队;又或者专门针对MMORPG的抽象,提供角色、怪物等元素。

抽象层次越高,就越容易使用,但通用性就越弱。

作为公司内的中台部门,要对技术发展有前瞻性,这样才能够在下一波浪潮中去推动技术落地。

分享到这里,谢谢大家。

RECOMMEND

推荐阅读

扫码关注【华章计算机】视频号

每天来听华章哥讲书

更多精彩回顾

书讯 | 10月书讯(上) |  小长假我读这些新书

书讯 | 10月书讯(下) |  小长假我读这些新书

资讯 | 什么是ETL?一文掌握ETL设计过程

书单 | 8本书助你零基础转行数据分析岗

干货 | 架构设计的新思路,《架构之道》读书笔记

收藏 | 终于有人把微服务讲明白了

上新 | 【新书速递】构建高质量软件:持续集成与持续交付系统实践

赠书 | 你已选中了添加链接的内容

点击阅读全文购买

新一代游戏服务端框架,该是什么样的?相关推荐

  1. 基于skynet设计游戏服务端框架

    skynet并不是一个开箱即用的服务端框架,游戏后端在开展业务时,需要根据自身业务特点,合理设计相应的服务端框架.在这里我根据自身的设计目标,写下各方面的选择与取舍.对于小型企业来说,一些商业化的软件 ...

  2. pomelo + vscode + typescript搭建可约束可调试的游戏服务端框架

    说在前面 pomelo: 它是网易开源的一套基于Node.js的游戏服务端框架,详情请戳这里关于pomelo的种种这里不详细说.点击链接查看详情.但是由于pomelo是js项目,使用起来的时候并不是很 ...

  3. 推广下自己的JAVA开源游戏服务端框架

    Carmelo是基于Java的游戏服务端框架,适合于页游和手游.它的主要特点是: 利用Netty实现高效的NIO通信,同时支持TCP/HTTP协议 完善的三层架构模型,易扩展 通用.完善的sessio ...

  4. SGAME:一个简单的go游戏服务端框架

    SGame是一个由GO实现的游戏简单服务端框架. 说明 主要是使用GO丰富的库资源和较高的开发效率. 开发简单 可以使用已有的代码框架很方便的构建一个新的进程 方便扩展 基于已有的框架可以动态的扩展进 ...

  5. 如何快速开发游戏服务端框架?

    快速开发游戏服务端框架的方法如下: 分析游戏需求:首先要明确游戏的功能和玩法,并确定服务端的职责. 选择适当的开发工具:可以选择一些专门用于游戏服务端开发的工具,比如 Unity.Unreal Eng ...

  6. Python 主流棋牌游戏 服务端 框架分析 原创笔记

    经测试此产品运营稳定 包含数十款房卡子游戏.俱乐部(五级权限).比赛场 客户端采用Lua脚本开发 .后端Python 看过一些棋牌产品 很多产品基于此套棋牌框架开发而来 算市面上一个主流框架 但却没有 ...

  7. Pomelo:网易开源基于 Node.js 的游戏服务端框架

    Pomelo 是基于 Node.js 的高性能.分布式游戏服务器框架.它包括基础的开发框架和相关的扩展组件(库和工具包),可以帮助你省去游戏开发枯燥中的重复劳动和底层逻辑的开发.Pomelo 不但适用 ...

  8. 性能测试 - 游戏服务端框架

    服务端框架用于处理持续并发或瞬时并发的请求,同时有良好扩展性和稳定性,简单概括三点:并发性.稳定性.扩展性. 今天开始利用业余时间将自己经历过的多款上线游戏产品经验总结分享给童鞋们.从最基础的讲起,先 ...

  9. go hive skynet_云风的skynet在国内外来看究竟算什么水平?可以一统国内游戏服务端框架吗?...

    它和云风过往放出来的东西一样,是非常具有实践性的,可以解决实际开发问题的.目前我所在的手游项目使用 Erlang 进行服务器端开发的,如果重新开始,我会选择使用 skynet. 游戏服务器开发中的难点 ...

最新文章

  1. 用Font Awesome代替网页icon小图标
  2. Shell中的循环语句
  3. AWS s3访问权限
  4. while循环打印*菱形
  5. linux 文件系统的管理 (硬盘)
  6. MyEclipse2015双击不能打开文件
  7. ofo给还在路上垂死挣扎的战友们留下什么启示?
  8. 微信小程序:使用VantUI组件库
  9. 装逼技能:怎样优雅地摆放桌面图标?
  10. 华为路由器hilink怎么用_华为HiLink是什么?华为hilink智能联网怎么用
  11. ODM、JDM、OEM、OBM
  12. win8.1配置java环境
  13. 解决tomcat报limt 字节长度限制 tomcat web.xml里配置mappedfile
  14. 马化腾,直接把360做特了!
  15. anthony1314的数论小基础
  16. 2K元预算为什么要买7nm处理器的OPPO A95 主要还是耐用
  17. 洛谷 P2057 善意的投票
  18. 单片机 P0口、P1口 寄存器和引脚的不同
  19. 测速的c语言程序,51单片机测速c程序
  20. 制造业数字化转型后发展的未来画像

热门文章

  1. 实现一个自主飞行的无人机需要的技术:定位导航-环境感知-目标感知-控制规划
  2. React18警告:ReactDOM.render is no longer supported in React 18. Use createRoot instead. Until youswitc
  3. Leetcode:给定一个整数,将其转换成罗马数字
  4. Redis面试题总结(超详细)
  5. 前端面试你需要知道的事情:技术面试流程
  6. MYSQL数据库写马讲解
  7. 生气,是因为你不够大度;嫉妒,是因为你不够优秀;悲伤,是因为你不够坚强;郁闷,是因为你不够豁达。记住,所有的负面情绪都源于你的弱小,唯有强大自己才能够百毒不侵!
  8. Thinkphp5+ phpqrcode 在线批量生成二维码图片并保存在本地
  9. 转运中国邀请码批量验证
  10. Qt OpenGL(二十)——Qt OpenGL 核心模式版本