# dcgos **Repository Path**: azw/dcgos ## Basic Information - **Project Name**: dcgos - **Description**: 分布式集群游戏对象服务器 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-27 - **Last Updated**: 2025-12-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # dcgos dcgos分布式集群游戏对象服务器(distributed cluster game object server) ## 设计目标 支持动态扩展 用户无感知重启/更新 模块化组件化 简化后端开发快速交付游戏功能 ## 基础库实现cft cft: core framework template cftc: 基础函数/实用功能(纯函数无全局数据) cftf: 开发框架 template: 项目模板 ## 依赖的中间件 openresty: 网络接入层,负载均衡 consul: 配置中心服务器发现 rabbitMQ: 消息队列 redis: 缓存层 mysql: 数据库存储层 pm2: 进程管理工具 ## 设计思路 php是分布式集群后端的很好借鉴,但是其基本以http短连接为主游戏交互性比较强不大合适,所以php加上长连接的功能则可以达到传统c++/java游戏后端的效果同时有具备分布式集群架构的优点。 具体实现如下 stateagent: 维护客户端和server的连接(有状态) logic: 业务的实现,本身不存状态,数据从mysql/redis中存取(无状态) service: 抽象概念表示业务,logic是service的集合,logic必须实现一个以上的service,并且serviceId==1的是入口service(类似golang里的main函数),登录逻辑完成后stateagent里的session标记为已登录,只有已登录的session,stateagent才可以调用其他的service ### 模块/组件化 借鉴pc电脑的设计,主板:主service(serviceId==1) 模块:其他service,单体:所有的service都写到一个logic里 微服务:把service独立到单独的进程,主service是必要的 ## 关键功能/概念 配置中心: 服务发现 分布式锁: redis实现 grpc: 用于集群通信 全局唯一id: 每个集群里的进程都具备生成唯一id的功能 jwt: 登录离线认证,consul里每隔固定的时间刷新公钥 service接口: ``` type LogicServiceServer interface { Login(context.Context, *LoginRequest) (*LoginReply, error) Logout(context.Context, *LogoutRequest) (*LoginReply, error) Reconnect(context.Context, *ReconnectRequest) (*ReconnectReply, error) ProcessClientMsg(context.Context, *ProcessClientMsgRequest) (*ProcessClientMsgReply, error) mustEmbedUnimplementedLogicServiceServer() } ``` ## 架构总图 ![架构总图](doc/%E6%9E%B6%E6%9E%84%E6%80%BB%E5%9B%BE.png) ## logic微服务架构 ![logic微服务架构](doc/logic%E5%BE%AE%E6%9C%8D%E5%8A%A1%E6%9E%B6%E6%9E%84.png)