
这将是一个完整的,完全践行 DevOps/GitOps 与 Kubernetes 上云流程的 Golang 游戏服务器开发的系列教程。
这个系列教程是对开源项目 Nanoserver 的完整拆解,旨在帮助大家快速上手 Golang(游戏)服务器后端开发。通过实践去理解 Golang 开发的精髓 —— Share memory by communication(通过通信共享内存)。
同时这个项目可能还会涉及到 Linux 性能调优(BPF相关的工具)和系统保障(SRE)的相关的工作。
nanoserver 抽出来的,旨在帮助大家快速理解这个 Mahjong Server 是如何搭出来的。单体架构理解整体业务 -> 然后再 分布式 Nano Server + 微服务 改造(Step-by-Step)。我的本地环境:
go version
# go version go1.14.14 darwin/amd64
go mod help
Go mod 提供对 modules 操作的访问。
请注意,所有 go 命令都内置了对 modules 的支持, 不只是'go mod'。例如,日常的依赖关系添加(adding),删除(removing),升级(upgrading)和降级(downgrading)应该使用 'go get' 完成。有关 module 功能的概述,请参见 'go help modules'。
用法:
go mod <command> [arguments]
download 将模块下载到本地缓存edit 通过工具或脚本编辑 go.modgraph 打印模块依赖图init 在当前目录中初始化新模块tidy 添加缺少的内容并删除未使用的模块vendor 制作第三方依赖包(vendored)的依赖副本verify 验证依赖项具有预期的内容why 解释为什么需要软件包(packages)或模块(modules)使用 “go help mod <命令>” 可获取有关命令的更多信息。

├── configs # 配置文件
│ ├── config.toml
├── db # 数据库(xorm)相关
│ ├── model
│ │ ├── struct.go # database schema
│ ├── const.go
│ ├── logger.go
│ ├── model.go
├── internal
│ ├── game # 游戏服务器(Nano server)
│ │ ├── crypto.go
│ │ ├── game.go
│ │ ├── manager.go
│ ├── web # web 服务器(提供 API)
│ │ ├── web.go
├── pkg # 项目基础包
│ ├── algoutil # 常用工具函数
│ │ ├── algoutil.go
│ ├── crypto # md5 rsa sha1 x509 base64 相关工具
│ │ ├── crypto.go
│ ├── errutil # 游戏服务器中错误码和错误信息统一管理
│ │ ├── code.go
│ │ ├── errutil.go
│ ├── whitelist # 白名单验证工具函数
│ │ ├── white_list.go
├── protocol # 协议(放所有游戏)
│ ├── web.go
├── main.go # 入口
Everything start with main.go
configs/config.toml
core 核心基础配置webserver web 服务器配置game-server 游戏服务器配置database 数据库配置whitelist 白名单配置update 客户端更新配置game.Startup()
config.toml,打印相关启动信息:房卡设置)pipeline(Inbound & Outbound)WithPipelineWithHeartbeatIntervalWithLoggerWithSerializerWithComponentsweb.Startup()
XORM)DSN 数据库连接字符串ShowSQL 是否显示生产的 Sql 语句MaxIdleConn 最大空闲连接MaxOpenConn 最大打开连接 < MaxIdleConnsyncSchema xorm 同步 model 到数据库表结构async write channel 数据异步插入管道,持久化数据async update channel 数据异步更新管道,持久化数据ping 数据库, 保持连接池连接http.ListenAndServeTLSsyscall.SIGINTsyscall.SIGQUITsyscall.SIGKILL同时,在 kubernetes 中运行微服务时。我们需要处理 kubernetes 发出的终止信号。这样做的正确方法是:
SIGINT, SIGTERM/health 路由应返回状态码 4xx,5xx)kubernetes 将您的应用程序从负载均衡器中移除
上篇已有详细介绍,这里就不赘述了哈。
云原生项目实践DevOps(GitOps)+K8S+BPF+SRE,从0到1使用Golang开发生产级麻将游戏服务器—第1篇
docker-compose -f docker-compose.mysql.5.7.yaml up # -d
docker-compose -f docker-compose.mysql.5.7.yaml down
☁️ Live reload for Go apps
go get -u github.com/cosmtrek/air
开发(项目根目录):
air

VSCode-Go Debugging
安装 Delve
打开 命令面板(Windows/Linux: Ctrl+Shift+P; OSX: Shift+Command+P),选择 Go: Install/Update Tools, 然后选择 dlv
开始调试
打开你想要调试的 package main 源文件(source file)或测试文件(test file)
使用以下任何一种方式进行调试:
命令面板, 选择 Debug: Start Debugging,然后选择 Go。Run and Debugs,然后选择 Go。