介绍


DevOps/GitOpsKubernetes
NanoserverShare memory by communication(通过通信共享内存)


Linux


脚手架项目


nanoserverMahjong Server单体架构分布式 Nano Server微服务


基础回顾


Go Modules


我的本地环境:



go mod help
Go modmodules
gomodules'go mod''go get'module'go help modules'

用法:



downloadeditgraphinittidyvendorverifywhy
“go help mod <命令>”


微信图片_20220611151924.png

脚手架基本结构



Mahjong Server 基础启动流程


main.go


加载配置文件


configs/config.toml
corewebservergame-serverdatabasewhitelistupdate


启动 Game Server


game.Startup()
config.toml
    • 当前游戏服务器版本
    • 是否强制更新
    • 当前心跳时间间隔
房卡设置
    • 玩家申请加入俱乐部
    • 创建一张桌子
    • 根据桌号返回牌桌数据
    • 设置桌号对应的牌桌数据
    • 检查登录玩家关闭应用之前是否正在游戏
    • 网络断开后, 重新连接网络
    • 网络断开后, 如果ReConnect后发现当前正在房间中, 则重新进入, 桌号是之前的桌号
    • 应用退出后重新进入房间
    • 理牌结束
    • 定缺
    • 有玩家请求解散房间
    • 玩家语音消息
    • 处理踢出玩家和重置玩家消息(来自http)
    • ……
  1. 注册游戏数据包加密管道
pipelineInboundOutbound
  1. 根据设置,启动游戏服务器(Nano server)
WithPipelineWithHeartbeatIntervalWithLoggerWithSerializerWithComponents


启动 Web Server


web.Startup()
XORM
DSNShowSQLMaxIdleConnMaxOpenConnsyncSchemaasync write channelasync update channelping
  1. 启用白名单(风控相关功能)
  2. API 服务注册(业务相关接口)
    • 登录
    • 注册人数
    • 活跃人数
    • 同时在线人、桌数
    • 留存
    • 房卡消耗
    • 重置玩家未完成房间状态
    • 设置房卡消耗
    • 消息广播
    • 踢人
    • 在线信息
    • 玩家充值
    • 玩家信息查询
    • ……
http.ListenAndServeTLS
syscall.SIGINTsyscall.SIGQUITsyscall.SIGKILL
kuberneteskubernetes
SIGINTSIGTERM/health4xx5xxkubernetes


脑图


微信图片_20220611151954.pngimage.gif


快速上手开发


Docker Compose 本地一键启动 MySql


上篇已有详细介绍,这里就不赘述了哈。



使用 Air 进行本地开发


☁️ Live reload for Go apps



开发(项目根目录):



微信图片_20220611152020.png

使用 VSCode-Go 插件调试程序


VSCode-Go Debugging

Delve
命令面板Go: Install/Update Tools,dlv


开始调试


package mainsource filetest file

使用以下任何一种方式进行调试:


命令面板Debug: Start DebuggingGoRun and DebugsGo

微信图片_20220611152033.png