Skip to content
i0gan edited this page Apr 10, 2024 · 1 revision

Squick宇宙计划

背景

元宇宙,是人类运用数字技术构建由现实世界映射或超越现实世界的一种可与现实世界交互的虚拟世界,它具备了新型社会体系的数字生活空间。而VR可以提供一种身临奇境的体验,让使用者进入VR世界的体验,更加贴合元宇宙的概念。VR拥有极高的虚拟世界交互体验,本次选题,是作为一个VR实时同步的后端研发框架,让元宇宙软件系统开发起来拥有一个比较完整的结构。目前该项目也正在运用在成都开发者联盟有限公司的两款VR游戏,一款是多人下棋桌游和一款VR多人实时射击类游戏之中,这两款VR游戏之后会也即将引入NFT来进行数字资产交易,促进元宇宙和Web3.0的时代的到来。

意义

为了更快速、稳定、低成本的开发以上需求,服务端需要有一个比较成熟、功能丰富、快速接入,性能强的框架。目前在开源社区中,暂未拥有一款比较成熟的框架,大部分服务端框架局限性都比较高,功能单一,跨平台性差,容灾性差,难以达到商业级别的要求,绝大部分成熟的商业框架都属于公司个人的资产,不会开放源代码。本次项目会伴随着两款商业游戏不断完善和更新,核心框架源代码进行Github开放,免费供给个人或供给商业公司学习使用,那么实现一个比较完善的游戏服务端框架且满足以上需求是今后所要做的内容。

基本思路

本课题主要是综合学习过的c++、go编程知识,开源框架,相关api等,实现了较为通用型的综合服务端框架。

工作重点

  1. 采用C++与Lua共同开发的一款服务端框架,要拥有极强的抗压能力和低资源消耗。

  2. 服务器可动态扩容,分布式系统架构,集群管理,分布式消息队列,容器化技术,

  3. 服务器对象要有:网关服务器、代理服务器、世界服务器、大厅服务器、数据库服务器、中心服务器、登录服务器、后台管理服务器、微服务器等。

  4. 采用kubernetes技术做分布式服务器管理,通过命令式来管理集群横向拓展减轻服务器压力。

  5. 代理服务器网络协议需要支持tcp、udp、kcp、http/https、websocket。

  6. 内部服务端之间通讯采用tcp + protobuf序列化的rpc架构。

  7. 采用动态连链接库方式动态加载插件,开发拓展插件,让开发服务器变成开发插件

服务端模仿游戏引擎,拥有虚拟世界,也拥有场景,每个场景都可动态生成和销毁对象,对象也拥有基本属性,比如拥有者,位置,旋转等等。

  1. Lua业务代码支持热更新。

数据库服务器:采用redis做数据缓存,mysql做为数据持久化,通过数据库服务器,让redis与mysql数据互相转换,让数据读取和存储尽量的减少磁盘IO次数。

  1. 提供常用的商业级游戏引擎的相关网络SDK,如Unity3d、Unreal Engine,也对上述提到的两款商业级项目提供技术支持。

技术路线

本系统主要采用c++、lua、go语言进行开发,测试或工具代码由脚本语言进行开发。网络协议涉及TCP、UDP、KCP、HTTP/HTTPS、WebSocket等;数据序列化涉及Protobuf、Json;分布式管理涉及Docker容器技术、K8S、数据同步等等;其中也还涉及热更和模块化;跨平台技术;分布式技术;Redis和Mysql数据库技术等等。

解决方案

分布式采用中心服务器对子服务器进行监控,管理,动态扩容,容灾处理等等,各服务器之间也能借助中心服务器进行通信,再结合容器化技术实现快速部署和管理分布式系统。服务器与客户端之间的通信协议主要以TCP + Protobuf自定义协议来实现RPC,通过消息ID来区分不同的RPC接口。跨平台技术采用宏定义区分各个平台系统接口。商业级游戏引擎的网络SDK,Unity采用C#编写TCP + Protobuf的RPC接口,Unreal Engine基于腾讯的Unlua插件和LuaProtobuf、LuaSocket采用Lua编写TCP + Protobuf的RPC接口。c++层热更和模块化将业务代码封装在动态链接库里,采用动态加载的方式进行执行动态链接库里的代码,在更新的时候,只需让程序卸载该插件,可以在程序不停止的情况下可以实现dll动态替换从而实现代码热更和模块化,模块之间的调用,是每个模块都可以提供c++纯虚函数接口,其他模块只需获取该模块的对象,将其对象强转为接口类,就可以实现跨动态链接库的函数调用。连接测试需要模拟客户端同时连接服务器,采用多进程方式来开启多个测试客户端,每个连接都计算一下整个RPC过程的调用时间,采用K8S或在容器内通过命令监控服务端内存占用,CPU消耗,带宽消耗等信息。

Clone this wiki locally