1. 程式人生 > >雲原生專案實踐DevOps(GitOps)+K8S+BPF+SRE,從0到1使用Golang開發生產級麻將遊戲伺服器—第3篇

雲原生專案實踐DevOps(GitOps)+K8S+BPF+SRE,從0到1使用Golang開發生產級麻將遊戲伺服器—第3篇

![](https://img2020.cnblogs.com/blog/436453/202102/436453-20210207104600178-1879482117.jpg) ## 通過伺服器日誌和客戶端抓包瞭解遊客(Guest)登入流程 ### 系列文章 1. [雲原生專案實踐DevOps(GitOps)+K8S+BPF+SRE,從0到1使用Golang開發生產級麻將遊戲伺服器—第1篇](https://mp.weixin.qq.com/s/Jyq_A1vehrnMwv6AdOtQ1w) 2. [雲原生專案實踐 DevOps(GitOps)+K8S+BPF+SRE,從 0 到 1 使用 Golang 開發生產級麻將遊戲伺服器—第2篇](https://mp.weixin.qq.com/s/jnQaz08fAzQ3J7tZBdil4Q) ### 介紹 這將是一個完整的,完全踐行 `DevOps/GitOps` 與 `Kubernetes` 上雲流程的 Golang 遊戲伺服器開發的系列教程。 這個系列教程是對開源專案 `Nanoserver` 的完整拆解,旨在幫助大家快速上手 Golang(遊戲)伺服器後端開發。通過實踐去理解 Golang 開發的精髓 —— `Share memory by communication(通過通訊共享記憶體)`。 同時這個專案可能還會涉及到 `Linux` 效能調優(`BPF` 相關的工具)和系統保障(`SRE`)的相關的工作。 ### Step-By-Step 開發 Mahjong Server * `單體架構`理解 `Mahjong Server` 業務 -> `Nano Distributed Game Server(分散式)` + `微服務` 改造。 * Demo:[go-mahjong-server](https://github.com/Hacker-Linner/go-mahjong-server) ## 遊客登入業務分析 `遊客(Guest)登入` 這裡主要還是用於開發與除錯程式。 ### 回顧一下 Nano 框架 關於 `Nano Game Server` 的快速上手大家可以參看我之前寫的 -> [5 分鐘上手 Nano 遊戲伺服器框架](https://mp.weixin.qq.com/s/lTAbQm4VAPysyOhFYqnHzQ) **Nano 術語** * 元件(`Component`):`nano` 應用的功能就是由一些鬆散耦合的 `Component` 組成的,每個 `Component` 完成一些功能。 * `Handler`:它定義在 `Component` 內的方法,用來處理具體的業務邏輯。 * 路由(`Route`):用來標識一個`具體服務` 或者客戶端接受服務端推送訊息的`位置`。 * 會話(`Session`):客戶端連線伺服器後, 建立一個會話儲存連線期間一些上下文資訊。連線斷開後釋放。 * 組(`Group`):`Group` 可以看作是一個 `Session` 的容器,主要用於需要廣播推送訊息的場景。 * 請求(`Request`), 響應(`Response`), 通知(`Notify`), 推送(`Push`):`Nano` 中四種訊息型別。 **Nano 元件的生命週期** ```go type DemoComponent struct{} func (c *DemoComponent) Init() {} func (c *DemoComponent) AfterInit() {} func (c *DemoComponent) BeforeShutdown() {} func (c *DemoComponent) Shutdown() {} ``` * `Init`:元件初始化時將被呼叫。 * `AfterInit`:元件初始化完成後將被呼叫。 * `BeforeShutdown`:元件銷燬之前將被呼叫。 * `Shutdown`:元件銷燬時將被呼叫。 整個元件的生命週期看起來非常的清晰。 ### 為 `Nano` Game Server 開啟 Debug 模式 `internal/game/game.go`,我加入了 `nano.WithDebugMode()` ```go nano.Listen(addr, nano.WithPipeline(pip), nano.WithHeartbeatInterval(time.Duration(heartbeat)*time.Second), nano.WithLogger(log.WithField("component", "nano")), nano.WithSerializer(json.NewSerializer()), nano.WithComponents(comps), nano.WithDebugMode(), ) ``` ### 啟動遊戲伺服器並檢視其啟動日誌 ![](https://img2020.cnblogs.com/blog/436453/202102/436453-20210207104623113-284169475.jpg) 這個主要是瞭解 `Nano` Server 啟動的時候都註冊了哪些遊戲