Gobige 是一个高性能、模块化的分布式游戏服务器框架,旨在简化游戏服务器的开发和部署。它支持多种服务器类型的协同工作,提供了灵活的消息路由和高效的 RPC 调用机制。
MsgHandler
的消息分发机制,支持普通消息、RPC 消息和服务器间消息。gobige/
├── dbmanager/ # 数据库管理模块
├── entity/ # 实体管理模块
├── global/ # 全局配置和常量
├── logger/ # 日志模块
├── msgdef/ # 消息定义和 Protobuf 文件
├── msghandler/ # 消息处理模块
├── service/ # 服务管理模块
├── sess/ # 会话管理模块
└── tools/ # 工具和辅助脚本
git clone https://github.com/your-repo/gobige.git
cd gobige
确保已安装 Go 环境,运行以下命令安装依赖:
go mod tidy
使用以下命令编译并运行服务器:
go build -o gobige-server main.go
./gobige-server
server.json
是 Gobige 框架的核心配置文件,包含以下主要字段:
Config:全局配置部分。
recover
机制,默认为 true
。false
。false
。false
。[ServerName]:服务器实例配置部分。
Redis 配置在 server.json
文件的 RedisList
字段中定义,每个 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",
})
gen-gobige-json
工具生成配置文件确保已安装 Go 环境,并克隆 gen-gobige-json
工具代码库:
git clone https://gitee.com/night-tc/gen-gobige-json.git
cd gen-gobige-json
修改 server.tmpl
模板文件,根据实际需求调整配置。
运行以下命令生成 server.json
文件:
go run main.go -p ../res/config/server.tmpl -o ../res/config/server.json
-p
参数指定模板文件路径,例如 ../res/config/server.tmpl
。-o
参数指定输出文件路径,例如 ../res/config/server.json
。将生成的 server.json
文件放置到服务器运行目录下。
示例模板文件 server.tmpl
的内容如下:
{
"Config": {
"Recover": true,
"Debug": false,
"IsCreateDB": false,
"EncryptEnabled": false,
"SessTicker": 60,
"SessTimeout": 300,
"LogFile": "log.toml",
"Etcd": {
"Addrs": ["127.0.0.1:2379"],
"DialTimeout": 5,
"LeaseTTL": 60
}
},
"LoginServer": {
"ServerID": 1,
"TickCount": 100,
"DebugAddr": "127.0.0.1:6060",
"MysqlConfig": {
"MySQLUser": "root",
"MySQLPwd": "password",
"MySQLAddr": "127.0.0.1:3306",
"MySQLDB": "gobige",
"MySQLMaxIdleConns": 10,
"MySQLMaxOpenConns": 100,
"MySQLMaxLifetime": 3600
},
"Listen": {
"Inner": {
"Listen": "127.0.0.1:8000",
"Addr": "127.0.0.1",
"PortMin": 8000,
"PortMax": 8000,
"MaxConn": 1000
},
"Outer": {
"Listen": "0.0.0.0:9000",
"Addr": "127.0.0.1",
"PortMin": 9000,
"PortMax": 9000,
"MaxConn": 1000
}
},
"RedisList": [
{
"Name": "LoginRedis",
"Addr": "127.0.0.1:6379",
"Index": 0,
"MaxIdle": 10,
"IdleTimeout": 300,
"MaxActive": 20,
"Password": ""
}
]
}
}
在 msgdef/protomsg
目录下定义 Protobuf 文件,运行工具生成对应的 Go 文件:
protoc --go_out=. --go-grpc_out=. your_proto_file.proto
可以参考 Gobige Demo 项目,了解如何使用 Gobige 框架构建分布式游戏服务器。
欢迎提交 Issue 和 Pull Request!如有任何问题,请联系维护者。
Gobige 使用 MIT License 进行许可。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。