# zinx游戏服务器 **Repository Path**: zomb/game-server ## Basic Information - **Project Name**: zinx游戏服务器 - **Description**: 一个基于zinx框架的游戏服务器 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2022-01-08 - **Last Updated**: 2024-10-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: Cpp ## README 这是在网上找寻的一个c++技术栈的项目,一开始看觉得涉及的技术众多,但慢慢学习展开以后,逐渐熟悉以后感觉还好,不管遇见什么始终都要迎难而上,目前为止,大部分的功能都已经能够复现,还有一些缺漏尚未补上,例如当前是在配置文件中存储用户的账号和密码,可以进一步放在mysql数据库中存储。但目前以学习为主,这些功能实现与其他项目重复,所以暂且搁置。 该服务器是基于zinx框架的多人在线游戏服务器,涉及的技术有protobuf,redis,时间轮定时器,timerfd等。用到了责任链,工厂方法,代理等设计模式。此外,游戏服务器支持分布式多实例部署,运用了Nginx+Fastcgi,docker,Json,redis发布订阅和thrift-c++的RPC调用等技术。这里作为一个项目的摘要。 ## 服务器职责 该服务器可以实现以下功能,若对其扩展能够实现更多的功能。 - 新客户端连接后,向其发送ID和名称 - 新客户端连接后,向其发送**周围**玩家的位置 - 新客户端连接后,向**周围**玩家发送其位置 - 收到客户端的移动信息后,向**周围**玩家发送其新位置 - 收到客户端的移动信息后,向其发送**周围新**玩家位置 - 收到客户端的聊天信息后,向**所有**玩家发送聊天内容 - 客户端断开时,向**周围**玩家发送其断开的消息 ## zinx框架结构 ![1560788969989](README.assets/1560788969989.png) 该框架主要有三层:通道层,协议层,角色层,实现一个简单的框架处理多IO。其中通道层主要负责收发数据、建立连接;协议层主要负责对数据的封装处理;而角色层主要实现对业务的处理。三层分别对应Ichannel,Iprotocol,Irole。 通道层和协议层之间传输的数据格式为BytesMsg,协议层和角色层之间的传输数据格式为UserData或UserDataMsg,所有数据格式的父类为UserData。而ZinxKernel作为整个zinx框架的核心,为单例模式。在使用中能够将三层之间的关系互相连接,通过返回函数指针的方式,决定数据交给哪一层及相应的业务处理。 ## 容器分布式部署 将服务器进行静态化编译,然后将服务器程序封装为一个容器,每个容器就是一个游戏房间,可以通过fastcgi部署在多台主机上,实现分布式部署,同时不同主机上的容器,通过外部连接redis服务器实现集群通信。 ![分布式架构](README.assets/分布式架构.png) ## Nginx+fcgi 在项目中除了注册时候需要用的静态页面之外,还需要将注册的账号和密码写入数据库或者配置文件等业务逻辑,因此需要通过Nginx+fcgi实现动静分离。 ![image-20220210221742587](README.assets/image-20220210221742587.png) ## 登陆器实现 ![image-20220210215929874](README.assets/image-20220210215929874.png) ![消息传递图](README.assets/消息传递图.png) 登陆器是通过qt实现,能够与服务器建立TCP连接,服务器上的Nginx服务器实现转发功能,转发给fcgi实现业务的逻辑。 ## 成果展示 ![image-20220211220730652](README.assets/image-20220211220730652.png)