游戏服务器网关,负责转发游戏客户端请求到后端游戏服务器。
- 多协议支持:TCP、UDP、HTTP、WebSocket
- 负载均衡:加权轮询策略,支持后端权重配置
- 健康检查:自动检测后端服务器状态
- 连接管理:支持最大连接数限制
- 认证:请求认证机制
- 限流:请求频率限制(分片无锁设计)
- 会话管理:游戏会话管理
- 连接池:TCP/UDP 连接复用,减少连接开销
- 高性能:零分配、并发安全
GameServerGateway/
├── cmd/GameServerGateway/ # 程序入口
├── internal/
│ ├── app/ # HTTP 服务应用
│ ├── auth/ # 认证模块
│ ├── config/ # 配置管理
│ ├── gateway/ # 网关核心(TCP/UDP 代理)
│ ├── handler/ # HTTP 处理器
│ ├── middleware/ # HTTP 中间件
│ ├── ratelimit/ # 限流模块
│ ├── router/ # 路由与负载均衡
│ └── session/ # 会话管理
├── pkg/
│ ├── errors/ # 错误处理
│ ├── logger/ # 日志库
│ └── pool/ # 连接池(TCP/UDP)
├── configs/ # 配置文件
├── deployments/ # 部署配置
│ └── k8s/ # Kubernetes 配置
├── tests/ # 测试
│ └── unit/ # 单元测试
├── go.mod
├── go.sum
└── Makefile
- Go 1.21+
make build# 默认配置
./bin/GameServerGateway
# 指定配置文件
./bin/GameServerGateway -config configs/config.yamlmake test配置文件位于 configs/config.yaml,主要配置项:
server:
# 运行模式: http, gateway, both
mode: both
port: 8080
# 游戏网关配置
gateway:
tcp_enabled: true
tcp_port: 9001
udp_enabled: true
udp_port: 9002
ws_enabled: true
ws_port: 9003
max_conns: 50000
# 后端游戏服务器列表
backends:
- id: "game-server-1"
host: "192.168.139.180"
port: 8090
game_type: "poker"
weight: 100
healthy: true
max_conns: 10000
# 认证配置
auth:
enabled: true
jwt_secret: "your_jwt_secret_key_here"
token_expire: 360
# 限流配置
rate_limit:
enabled: true
per_conn_limit: 100
# 会话配置
session:
timeout: 300
heartbeat: 60当前实现加权轮询 (Weighted Round Robin) 策略:
- 根据后端
weight配置分配请求权重 - 支持
maxConns限制后端最大连接数 - 结合健康检查自动跳过不健康的后端
| 指标 | 数值 |
|---|---|
| 连接池获取 | ~70ns/op |
| 限流分片查询 | ~4ns/op |
| 理论单机 QPS | 50-100 万+ |
| 内存占用 | 低(连接复用) |
基准测试:
go test -bench=. -benchmem -run=^$ ./tests/unit/...