一个高性能、模块化的分布式游戏服务器框架,旨在简化游戏服务器的开发和部署
它支持多种服务器类型的协同工作,提供了灵活的消息路由和高效的 RPC 调用机制。
功能特点- 模块化设计:支持按需加载模块,方便扩展和维护。
- 高性能消息处理:基于 MsgHandler 的消息分发机制,支持普通消息、RPC 消息和服务器间消息。
- 分布式架构:支持多服务器协作,提供负载均衡和服务发现功能。
- 灵活的协议支持:基于 Protobuf 定义协议,支持客户端与服务器、服务器之间的通信。
- 易于扩展:通过注册消息处理器和自定义逻辑,快速实现业务需求。
目录结构
- /
- ├── dbmanager/ # 数据库管理模块
- ├── entity/ # 实体管理模块
- ├── global/ # 全局配置和常量
- ├── logger/ # 日志模块
- ├── msgdef/ # 消息定义和 Protobuf 文件
- ├── msghandler/ # 消息处理模块
- ├── service/ # 服务管理模块
- ├── sess/ # 会话管理模块
- └── tools/ # 工具和辅助脚本
复制代码 快速开始1. 下载附件源码
2. 安装依赖确保已安装 Go 环境,运行以下命令安装依赖: 3. 编译和运行使用以下命令编译并运行服务器: - go build -o gobige-server main.go
- ./gobige-server
复制代码 4. 配置文件配置文件说明server.json 是 Gobige 框架的核心配置文件,包含以下主要字段: Config:全局配置部分。
- Recover:是否启用 recover 机制,默认为 true。
- Debug:是否启用调试模式,默认为 false。
- IsCreateDB:是否创建数据库表,默认为 false。
- EncryptEnabled:是否启用加密,默认为 false。
- SessTicker:服务器连接心跳时间(秒)。
- SessTimeout:服务器连接超时时间(秒)。
- LogFile:日志配置文件路径。
- Etcd:ETCD 配置。
- Addrs:ETCD 集群地址列表。
- DialTimeout:连接超时时间(秒)。
- LeaseTTL:租约时间(秒)。
[ServerName]:服务器实例配置部分。
- ServerID:服务器唯一标识符。
- TickCount:服务器帧间隔时间(毫秒)。
- DebugAddr:调试模式监听地址。
- MysqlConfig:MySQL 数据库配置。
- MySQLUser:用户名。
- MySQLPwd:密码。
- MySQLAddr:数据库地址。
- MySQLDB:数据库名称。
- MySQLMaxIdleConns:最大空闲连接数。
- MySQLMaxOpenConns:最大打开连接数。
- MySQLMaxLifetime:连接最大存活时间(秒)。
- Listen:监听配置。
- Inner:内部监听地址。
- Outer:外部监听地址。
- Http:HTTP 监听地址。
- RedisList:Redis 配置列表。
Redis 配置说明Redis 配置在 server.json 文件的 RedisList 字段中定义,每个 Redis 配置包含以下字段: - Name:Redis 实例的名称,用于标识。
- Addr:Redis 服务器地址。
- Index:Redis 数据库索引。
- MaxIdle:最大空闲连接数。
- IdleTimeout:空闲连接超时时间(秒)。
- MaxActive:最大活跃连接数。
- Password:Redis 访问密码。
Redis 使用示例定义 Redis 实例
在 server.json 中定义 Redis 实例,例如:
- "RedisList": [
- {
- "Name": "LoginRedis",
- "Addr": "127.0.0.1:6379",
- "Index": 0,
- "MaxIdle": 10,
- "IdleTimeout": 300,
- "MaxActive": 20,
- "Password": ""
- }
- ]
复制代码
初始化 Redis 实例
在服务启动时,通过 global.SetRedisByName 注册 Redis 实例:
- rd := redislib.NewRedisAccess(
- redislib.RedisSetAddr("127.0.0.1:6379"),
- redislib.RedisSetIndexDB(0),
- redislib.RedisSetMaxIdle(10),
- redislib.RedisSetIdleTimeout(300*time.Second),
- redislib.RedisSetMaxActive(20),
- )
- global.SetRedisByName("LoginRedis", rd)
复制代码
获取 Redis 连接
使用 global.GetRedisAccess 获取 Redis 实例,并通过 GetConn 方法获取连接:
- conn := global.GetRedisAccess("LoginRedis").GetConn()
- defer conn.Close()
- // 使用 Redis 连接执行操作
- conn.Set(context.Background(), "key", "value", 0)
复制代码
使用 Redis 工具类
框架提供了工具类(如 LoginPlayer 和 GateSession)封装了 Redis 操作。例如:
- player := redisutil.NewLoginPlayer(12345)
- player.SaveInfo(map[string]interface{}{
- "playerid": 12345,
- "name": "test_player",
- })
复制代码
附件中包含基于框架开发的游戏服务器示例项目源码
该项目适用于多种类型的游戏开发,例如: - MMORPG: 支持大规模玩家在线交互,提供场景管理和实时通信功能。
- 卡牌游戏: 提供高效的数据库管理和缓存系统,支持复杂的游戏逻辑处理。
- 休闲游戏: 提供快速开发和部署能力,适合轻量级游戏的开发需求。
项目的主要特点包括: - 高性能: 基于 Go 语言开发,充分利用多核 CPU 的并发能力。
- 分布式架构: 支持多种服务类型(如网关、登录、数据库服务等),通过 etcd 实现服务发现和管理。
- 模块化设计: 各功能模块独立开发,易于扩展和维护。
- 工具支持: 提供多种开发工具(如协议生成工具、配置生成工具),提高开发效率。
- 跨平台支持: 可在 Windows、Linux 和 macOS 上运行。
通过本项目,开发者可以快速上手框架,学习如何构建一个完整的游戏服务器,并根据自身需求进行定制开发。 软件架构服务端架构:
- 基于框架开发,支持高并发和分布式架构。
- 使用 Go 语言编写,模块化设计,易于扩展和维护。
- 提供多种服务类型(如网关服务、登录服务、数据库服务等),通过 etcd 进行服务发现和管理。
通信协议:
- 使用 protobuf 定义客户端与服务器之间的通信协议。
- 支持消息路由和序列化,确保高效的数据传输。
数据库管理:
- 集成 MySQL 数据库,用于存储用户数据、角色信息等。
- 提供模块化的数据库访问层,支持延迟加载和脏数据管理。
缓存系统:
- 使用 Redis 作为缓存层,存储会话信息、玩家状态等。
- 提供高效的缓存操作接口,支持多种缓存策略。
工具支持:
- 提供json 工具,用于生成服务器配置文件。
- 提供协议生成工具,自动生成 protobuf 消息的注册代码。
日志与监控:
- 集成日志系统,支持多级别日志输出。
- 提供服务器负载监控和性能分析功能.
环境要求- 操作系统: Windows、Linux 或 macOS。
- 开发工具:
- Go 编译器(建议使用最新版本)。
- Git 版本控制工具。
- 数据库: MySQL(建议使用 8.0 或更高版本)。
- 缓存: Redis(建议使用 5.0 或更高版本)。
生成服务器程序也可使用 vscode--终端--运行生成任务--"go:build all server" 生成工具也可使用 vscode--终端--运行生成任务--"go: build server.json tool" 启动服务器 提取码下载:
|