Java 游戲服務器架構實戰
王廣帥
買這商品的人也買了...
-
$327大數據架構詳解:從數據獲取到深度學習
-
$450$356 -
$403游戲服務器架構與優化
-
$534$507 -
$352FFmpeg 從入門到精通
-
$474$450 -
$890$703 -
$474$450 -
$636$604 -
$383Flutter 實戰
-
$403Java 自然語言處理, 2/e
-
$834$792 -
$474$450 -
$774$735 -
$780$663 -
$714$678 -
$780$616 -
$594$564 -
$594$564 -
$658$619 -
$534$507 -
$880$695 -
$1,200$792 -
$458你真的會寫代碼嗎
-
$505現代 API:通往架構師之門, 2/e
相關主題
商品描述
為了幫助服務器開發人員更好地理解服務器框架的設計與開發,本書從零開始,詳細闡述游戲服務器設計與開發的流程和技術點,包括網絡通信、分佈式架構設計、內部RPC通信、數據管理、多線程管理,並從實踐的角度出發,配合詳細的源碼,幫助廣大游戲服務器開發人員,或正在考慮從事游戲服務器開發的人員,更加系統地學習服務器架構的設計與開發。
本書實用性強,既可以幫助想從事服務器開發的人員快速學習相關知識,又可以幫助服務器開發人員向架構師進階。
作者簡介
王广帅
2011年进入游戏行业,一直致力于Java游戏服务器开发。2014年开始负责创业游戏公司的服务器架构设计工作,带领团队参与网页游戏、手机游戏、2D游戏、3D游戏、卡牌类游戏、多人在线(MMO)类游戏的服务器开发,积累了丰富的游戏服务器架构设计与开发经验。业余时间,经常在QQ群(66728073)、个人微信公众号(youxijishu)、技术博客分享游戏服务器开发的技术经验,并且独立维护一个专业的游戏开发网站——游戏技术网。
目錄大綱
第 1章 游戲服務器架構總體設計01
1.1 游戲服務器架構設計的意義 01
1.1.1 良好的架構設計有助於團隊協作開發 01
1.1.2 良好的架構設計有助於避免bug 的產生 02
1.1.3 良好的架構設計有助於制定合理的項目開發周期計劃 02
1.1.4 良好的架構設計有利於測試 03
1.2 游戲服務器架構分類 03
1.2.1 單體游戲服務器架構 03
1.2.2 分佈式游戲服務器架構 05
1.3 游戲服務器架構基本模塊 06
1.3.1 網絡通信長連接與短連接 06
1.3.2 網關 07
1.3.3 服務消息交互——消息中間件 08
1.3.4 業務處理框架 09
1.3.5 測試模塊 11
1.4 本章總結11
第 2章 服務器項目管理——Maven 12
2.1 Eclipse 中配置Maven 工具 12
2.1.1 Maven 下載與配置 12
2.1.2 Maven 環境變量配置 13
2.1.3 Maven 常用命令示例 15
2.2 搭建Maven 倉庫中心 16
2.2.1 安裝Nexus 16
2.2.2 在Maven 中配置私服 19
2.2.3 添加非開源依賴Jar 包 21
2.3 創建Maven 項目21
2.3.1 創建父項目 22
2.3.2 創建子項目 23
2.4 本章總結23
第3章 數據庫選擇與安裝24
3.1 數據持久化——MongoDB 24
3.1.1 為什麽使用MongoDB 24
3.1.2 安裝MongoDB 25
3.2 內存型數據庫——Redis 28
3.2.1 為什麽使用Redis 28
3.2.2 安裝Redis 29
3.2.3 使用Redis 緩存需要註意的事項 30
3.3 本章總結32
第4章 游戲服務中心開發33
4.1 游戲服務中心的作用 33
4.1.1 游戲服務中心提供游戲外圍服務 33
4.1.2 游戲服務中心方便動態擴展 34
4.2 游戲服務中心開發準備 34
4.2.1 根據需求設計架構 34
4.2.2 Spring Cloud 簡介 36
4.2.3 安裝Spring Tool 插件 37
4.2.4 添加公共pom 依賴 38
4.3 用戶登錄註冊功能開發 40
4.3.1 創建游戲服務中心項目 41
4.3.2 網絡通信數據格式定義 43
4.3.3 添加數據庫操作 45
4.3.4 實現登錄註冊 50
4.3.5 全局異常捕獲處理 55
4.3.6 登錄註冊測試 56
4.3.7 實現角色創建 57
4.3.8 角色創建測試 59
4.4 本章總結60
第5章 Web 服務器網關開發 61
5.1 Consul 服務註冊中心 61
5.1.1 Consul 簡介 61
5.1.2 安裝Consul 62
5.2 Web 服務器網關功能開發 63
5.2.1 Spring Cloud Gateway 簡介 63
5.2.2 創建Web 服務器網關項目 64
5.2.3 網關路由信息配置 66
5.2.4 測試Web 服務器網關請求轉發 68
5.3 統一驗證請求權限 69
5.3.1 在Web 服務器網關進行權限驗證的必要性 69
5.3.2 網關全局過濾組件——GlobalFilter 71
5.3.3 GlobalFilter 實現權限驗證 72
5.3.4 測試網關權限驗證 74
5.4 請求負載均衡 76
5.4.1 負載均衡組件——Spring Cloud Ribbon 76
5.4.2 自定義負載均衡策略 77
5.4.3 負載均衡策略配置 80
5.5 網關流量限制 81
5.5.1 常見的限流算法 81
5.5.2 添加Web 服務器網關限流策略 83
5.5.3 Web 服務限流測試 86
5.6 HTTPS 請求配置 86
5.6.1 HTTPS 簡介 86
5.6.2 HTTPS 證書申請 87
5.6.3 網關服務配置HTTPS 證書 89
5.6.4 測試HTTPS 訪問 90
5.7 服務錯誤異常全局捕獲 92
5.7.1 默認全局Web 異常捕獲 92
5.7.2 自定義全局Web 異常捕獲 93
5.7.3 異常捕獲測試 95
5.8 本章總結96
第6章 游戲服務器網關開發97
6.1 游戲服務器網關管理 97
6.1.1 游戲服務器網關必須支持動態伸縮 97
6.1.2 游戲服務器網關項目搭建與配置 99
6.1.3 游戲服務器網關信息緩存管理 101
6.1.4 游戲服務器網關負載均衡策略 105
6.1.5 測試游戲服務器網關信息 107
6.2 客戶端與游戲服務器網關通信開發 109
6.2.1 客戶端項目創建 109
6.2.2 網絡通信數據粘包與斷包 117
6.2.3 網絡通信協議制定 119
6.2.4 客戶端消息編碼與解碼開發 121
6.2.5 游戲服務器網關消息編碼與解碼開發 124
6.2.6 使用Netty 實現游戲服務器網關長連接服務 127
6.3 請求消息參數與響應消息參數對象化 130
6.3.1 請求與響應消息封裝 130
6.3.2 客戶端與游戲服務器網關通信測試 137
6.4 消息體對象序列化與反序列化 139
6.4.1 消息體使用JSON 序列化與反序列化 140
6.4.2 消息體使用Protocol Buffers 序列化與反序列化 142
6.5 消息自動分發處理 146
6.5.1 消息自動分發設計 147
6.5.2 消息自動分發開發 148
6.6 網絡通信安全 152
6.6.1 連接認證 152
6.6.2 通信協議加密和解密 154
6.6.3 游戲服務器網關流量限制 158
6.7 網絡連接管理 159
6.7.1 連接管理 159
6.7.2 連接心跳檢測 163
6.7.3 消息冪等處理 167
6.8 本章總結168
第7章 游戲服務器網關與游戲業務服務數據通信169
7.1 游戲服務器網關與游戲業務服務通信定義 169
7.1.1 游戲服務器網關消息轉發 169
7.1.2 定義消息通信模型 170
7.1.3 Spring Cloud Bus 消息總線 173
7.1.4 消息總線通信層——Kafka 174
7.1.5 消息總線消息發布訂閱測試 178
7.2 游戲服務器網關與游戲業務服務通信實現 178
7.2.1 消息序列化與反序列化實現 179
7.2.2 游戲服務器網關消息負載均衡 181
7.2.3 游戲服務器網關消息轉發實現 185
7.2.4 游戲服務器網關監聽接收響應消息 189
7.2.5 添加游戲業務服務項目 190
7.2.6 游戲服務接收並響應網關消息 193
7.3 游戲服務器網關與游戲服務通信測試 195
7.4 本章總結197
第8章 游戲業務處理框架開發198
8.1 游戲服務器中的多線程管理 198
8.1.1 線程數量的管理 198
8.1.2 游戲服務線程池分配 200
8.2 Netty 線程池模型 200
8.2.1 Netty 線程模型的核心類 201
8.2.2 獲取線程池執行結果 202
8.3 客戶端消息處理管理 205
8.3.1 借鑒Netty 的消息處理機制 205
8.3.2 客戶端消息事件處理框架模型 209
8.3.3 實現自定義MultithreadEventExecutorGroup 213
8.3.4 實現GameChannel 217
8.3.5 實現GameChannelPipeline 220
8.3.6 實現AbstractGameChannelHandlerContext 222
8.3.7 實現客戶端消息處理與消息返回 224
8.3.8 GameChannel 空閑超時處理 228
8.4 不同游戲用戶之間的數據交互 236
8.4.1 多線程並發操作數據導致的錯誤或異常 237
8.4.2 在功能設計上避免用戶數據之間的直接交互 239
8.4.3 在架構設計上解決用戶數據之間的直接交互 239
8.4.4 GameChannel 事件自動分發處理 243
8.5 本章總結245
第9章 游戲用戶數據管理246
9.1 游戲用戶數據異步加載 246
9.1.1 加載游戲數據的時機 246
9.1.2 異步加載游戲數據實現 247
9.2 游戲數據持久化到數據庫 250
9.2.1 游戲數據持久化方式 250
9.2.2 異步方式持久化數據的並發問題 251
9.2.3 數據定時異步持久化實現 253
9.3 Player 對象的封裝與使用 256
9.3.1 直接操作Player 對象的弊端 256
9.3.2 實現Player 對象數據與行為分離 258
9.4 本章總結260
第 10章 RPC 通信設計與實現 261
10.1 游戲模塊服務劃分 261
10.1.1 游戲服務需不需要微服務化 261
10.1.2 游戲服務模塊進程劃分規則 263
10.2 RPC 通信實現 264
10.2.1 自定義RPC 設計 264
10.2.2 負載均衡管理 268
10.2.3 創建競技場服務項目 274
10.2.4 RPC 請求消息的發送與接收 281
10.2.5 RPC 響應消息的發送與接收 290
10.2.6 RPC 請求超時檢測 292
10.3 本章總結293
第 11章 事件系統的設計與實現294
11.1 事件系統在服務器開發中的重要性 294
11.1.1 什麽是事件系統 294
11.1.2 事件系統可以解耦模塊依賴 295
11.1.3 事件系統使代碼更容易維護 296
11.2 事件系統的實現 296
11.2.1 自定義基於監聽接口的事件系統 297
11.2.2 自定義基於註解的事件系統 299
11.2.3 Spring 事件系統應用304
11.3 根據事件實現的任務系統 306
11.3.1 任務系統需求 307
11.3.2 面向過程的任務系統實現 308
11.3.3 面向對象的事件觸發式任務系統實現 309
11.4 本章總結 314
第 12章 游戲服務器自動化測試315
12.1 游戲服務器自動化測試的重要性 315
12.1.1 單元測試使代碼更簡潔 315
12.1.2 單元測試保證方法的代碼正確性 321
12.1.3 自動化測試保證代碼重構的安全性 323
12.2 游戲服務器自動化測試的實現 323
12.2.1 TestNG 框架簡介 324
12.2.2 Spring Boot 單元測試配置 325
12.2.3 方法單元測試案例實現 329
12.2.4 服務器集成測試實現 336
12.2.5 使用TestNG 配置文件區分不同的測試環境 340
12.3 本章總結342
第 13章 服務器開發實例——世界聊天系統 343
13.1 單服世界聊天系統實現 343
13.1.1 添加客戶端命令 344
13.1.2 服務器實現消息轉發 348
13.1.3 單服世界聊天測試 349
13.2 分佈式世界聊天系統實現 352
13.2.1 分佈式世界聊天系統設計 352
13.2.2 創建單獨的聊天項目 354
13.2.3 實現聊天消息的發布與轉發 356
13.2.4 分佈式世界聊天服務測試 359
13.3 本章總結360