GoOne

GoOne 是一套基于 Go 实现的微服务分布式游戏服务器框架,核心思路是 Reactor + CSP(并发消息驱动)且继承了很多C++游戏架构的思想,并配套提供:服务治理、配置中心、消息总线、网络层、部署控制台等“工程化”能力,适用于中小型游戏、MMO 等游戏后端业务。

Go Version License Stars

1. 架构概览

image

更详细的运行时与协议说明见:

2. 优势

3. 功能模块

3.1 ssrpc -- IDL 驱动的统一 RPC 运行时

GoOne 的 ssrpc 模块借鉴 CloudWeGo 的 IDL 驱动思路与 Kratos 的 middleware / transport 分层,嫁接到现有的 TransactionMgr + SSPacket 执行模型上。

更完整的现状说明见 docs/ssrpc_idl.md

传输层 Wrap 函数 挂载点 Proto option 当前状态
SSPacket WrapUnary TransactionMgr cmd/cmd_enum/cmd_name 主通路
HTTP WrapHTTPGin gin.IRoutes http_path 已在 web_svr 使用
WS WrapWS ssrpc.Dispatcher ws: true 已在 connsvr 登录前置使用
gRPC WrapGRPCUnary / WrapGRPCServerStreamTyped grpc.Server grpc: true runtime / codegen ready,支持 unary + server-streaming

关键组件:

当前协议归属:

当前推荐生成命令:

go run ./tools/cmd/genproto

包装脚本:

./scripts/proto_goone.sh
# Windows / PowerShell
./scripts/proto_goone.ps1

校验生成物:

./main.sh check-genproto
./main.sh check-genproto --full

Windows / PowerShell:

推荐接入方式:

  1. 用生成代码里的 New<Service>SServer(...) 创建服务端实现;
  2. 创建 ssrpc.Dispatcher
  3. 调用 Register<Service>ToDispatcher(...) 完成注册;
  4. 如果走 SSPacket 主通路,再调用 d.RegisterToTransactionMgr(globals.TransMgr) 挂到事务管理器上。

当前边界:

3.2 脚手架工具

快速创建新服务骨架:

go run tools/cmd/scaffold -name mysvr

生成 src/mysvrsvr/ 目录(main.go / app.go / globals / cmd_handler),与 infosvr 结构一致。 当前脚手架仍会保留一个兼容用的 cmd_handler/register.go 骨架;如果新服务走 IDL-first,通常应在 app.go 里接生成的 Register<Service>ToDispatcher(...) / Register<Service>ToTransactionMgr(...)

4. 快速开始(推荐:通过主控制台 main.sh)

main.sh 是统一入口(类似 “框架控制台”)。在 Windows 上建议使用 WSL2 或 Git-Bash 来执行这些 bash 脚本。

4.1 自检(强烈推荐先跑)

./main.sh doctor
./main.sh help

4.2 安装/切换 Go 版本(可选,但推荐与 go.mod 对齐)

项目 go.mod 当前要求 Go 1.25.4

./main.sh go list
./main.sh go install 1.25.4
./main.sh go use 1.25.4
./main.sh go current

4.3 一键拉起依赖环境(MySQL / Redis / ZooKeeper / RabbitMQ)

本地开发(推荐:直接 docker compose)

docker compose -f etc/env/env_docker.yaml up -d

远程/统一管理(通过 main.sh + Ansible)

# 需要先在部署机安装 ansible(只需做一次)
./main.sh install ansible

./main.sh docker install --env dev_local
./main.sh docker status  --env dev_local

Docker 配置来自:etc/env/env_docker.yaml

4.4 编译

main.sh 会调用仓库根目录的 build.shbuild.sh 现在只保留当前活跃服务的构建目标:connmaininfomysqlroomcenterweb(也兼容 connsvrroomcentersvrweb_svr 这类别名)。

./main.sh build          # 默认编译全部当前活跃服务
./main.sh build web      # 单独编译 websvr(target 由 build.sh 定义)
./main.sh build roomcenter
./build.sh list          # 查看当前活跃 target

Windows / PowerShell 可直接使用对应构建脚本:

.\build.ps1
.\build.ps1 web
.\build.ps1 roomcenter

4.5 本地运行(IDE/调试)

各服务通过统一 flag 读取配置(-svr_conf),示例配置见:

示例(按需启动):

./build/connsvr  -svr_conf=./etc/config/server_conf_ide.yaml
./build/mainsvr  -svr_conf=./etc/config/server_conf_ide.yaml
./build/infosvr  -svr_conf=./etc/config/server_conf_ide.yaml
./build/mysqlsvr -svr_conf=./etc/config/server_conf_ide.yaml
./build/roomcentersvr -svr_conf=./etc/config/server_conf_ide.yaml
./build/websvr   -svr_conf=./etc/config/server_conf_ide.yaml

Windows 下如果使用 build.ps1,对应可执行文件通常在 build\*.exe,例如:

.\build\connsvr.exe -svr_conf=.\etc\config\server_conf_ide.yaml
.\build\roomcentersvr.exe -svr_conf=.\etc\config\server_conf_ide.yaml
.\build\websvr.exe -svr_conf=.\etc\config\server_conf_ide.yaml

5. 部署(Ansible)

部署相关脚本在 deploy/,推荐仍通过 main.sh 调度:

5.1 安装 Ansible(部署机/控制机)

./main.sh install ansible

5.2 列出环境与角色

./main.sh env list
./main.sh role list

5.3 部署/重启服务

./main.sh deploy --env dev1 --action restart --role websvr
./main.sh deploy --env dev1 --action restart --roles websvr,mainsvr --dry-run

更多说明:

6. 安装与环境(Linux / Windows)

提示:历史文档里部分 “手动安装 Go 1.13 / 手动装中间件” 已过时;当前更推荐使用 main.sh go ...main.sh docker ... 统一管理。

7. 目录结构(Top Level)

api/        IDL 定义 (api/proto/) 与生成代码 (api/gen/)
build/      编译后的可执行文件输出目录
common/     公共模块(配置/常量/工具/游戏数据等)
deploy/     Ansible 自动化部署脚本与 roles
docs/       文档(架构/环境搭建/IDL 设计等)
etc/        环境与本地调试配置(`etc/env/` docker compose;`etc/config/` 示例 `server_conf_ide.yaml`)
game_protocol/ 协议子仓(共享消息 / CMD / protocol-owned service proto)
lib/        框架核心库
  lib/service/ssrpc/    ssrpc 运行时(Context/Dispatcher/Middleware/Wrap*/Client)
  lib/service/bus/      消息总线(RabbitMQ/NATS/Kafka/...)
  lib/service/router/   路由与服务编排
  lib/net/              网络层(tcp/kcp/ws)
  lib/contrib/          注册中心 / 配置中心
src/        业务服务(connsvr/mainsvr/infosvr/web_svr/roomcentersvr/mysqlsvr)
tools/      工具链
  tools/protoc-gen-goone/   IDL 代码生成器(protoc 插件)
  tools/cmd/scaffold/       脚手架工具(生成新服务骨架)
  tools/cmd/genproto/       proto 编译脚本
  tools/cfgtool/            配置工具
main.sh     主控制台脚本(推荐入口)

8. 常见问题(FAQ)

9. 交流与贡献

10. License

GoOne 使用 MIT 协议发布,详见 LICENSE