基于actor框架的开箱即用的游戏服务框架开源项目开启动声明
转眼进入游戏开发行业已经三个多月了,笔者身处的领域是游戏后端开发;虽然只是实习,但是对于游戏后端开发领域的一些现状有一些想法。读者可以把这篇文章当做吐槽文哈哈哈。
与互联网后端的差异
大学期间,笔者接触的大多是互联网后端相关和底层工具的开发,对游戏后端不甚了解,在有幸进入该领域后发现与互联网存在比较大的差异。
互联网后端服务大多是无状态的,从客户端传来的数据不会在内存停留太久,处理完后会立刻进入数据库。同样客户端请求的数据也不会在内存中停留太久。而游戏后端服务大多是有状态的,服务器中会维护一段时间内的数据,这个时间的长短取决于游戏的类型。休闲类和Moba类游戏的状态数据可能只会在一局游戏中存在,时间可能在5分钟到30分钟不等,而MMORPG类游戏的状态数据可能会在服务器中存在很长时间,取决于玩家的在线时间。
互联网的交互模式大多是请求-响应模式;而游戏后端的交互模式就比较繁多了,因为业务需求的不同,适合的交互模式也就不同。通常同时存在请求-响应,订阅-发布,长推送等多种交互模式。请求-响应模式用于客户端主动行为,主动修改服务端状态;订阅-发布用于服务端主动行为,主动推送状态快照给客户端;长推送用于某些特定服务的数据推送,比如邮件通知、玩家状态通知等等。
互联网服务的泛用性极强,所以业界衍生出许多开箱即用的成熟的框架。比如Java的Spring,Go的Gin,Rust的Actix等等。同时针对互联网服务普遍存在的一些问题,衍生出许多中间件,比如消息队列,redis缓存,nginx网关等等。虽然这些问题在游戏领域也存在,也同样使用这些中间件去解决,但是游戏领域的后端却迟迟没有产生成熟的易用的服务框架。相比客户端常见的Unity,Unreal等成熟的游戏引擎,游戏后端的服务引擎显得少见。
服务引擎缺失的现状分析
业内也是存在优秀的游戏后端引擎的,比如云风大佬的skynet,著名的mmo服务引擎bigworld。但是这些引擎都存在一个问题,不够易用,解决的问题较底层。笔者在思考能不能基于类似的成熟的底层框架,再抽象一层面向游戏业务的开箱即用的服务引擎。做到全类型覆盖。
触发点
为什么会产生这样的想法呢?一方面是反思游戏领域的开源氛围远不如互联网那般活跃,另一方面是笔者在实习期间接触到的分布式框架Actor框架,认为其能为游戏通用化服务引擎赋能。前面几篇文章也尝试了使用Actor框架开发一个房间匹配游戏服务,但是觉得和游戏类型绑定太深,于是想要推倒重来,重新基于Actor框架设计全新的游戏服务引擎。
对于这个框架的实现,笔者仍在构思,但是核心思想就是使用actor架构对传统游戏架构进行重新赋能,使得在开发上更易用,天然适合分布式场景,高性能高可用。
最近可能就要着手开始实现了,这篇文章算是一个启动声明,后续会持续更新项目的进展。