多人在線遊戲架構實戰:基於 C++ 的分佈式遊戲編程

彭放著

  • 出版商: 機械工業
  • 出版日期: 2020-11-01
  • 售價: $654
  • 貴賓價: 9.5$621
  • 語言: 簡體中文
  • 頁數: 412
  • 裝訂: 平裝
  • ISBN: 7111667921
  • ISBN-13: 9787111667926
  • 相關分類: C++ 程式語言
  • 立即出貨

買這商品的人也買了...

商品描述

《多人在線遊戲架構實戰:基於C++的分佈式遊戲編程》主要講述大型多人在線遊戲開發的框架與編程實踐,
以實際例子來介紹從無到有地製作網絡遊戲框架的完整過程,讓讀者了解網絡遊戲製作中的所有細節。
  
全書共12章,從網絡遊戲的底層網絡編程開始,逐步引導讀者學習網絡遊戲開發的各個步驟。
  
《多人在線遊戲架構實戰:基於C++的分佈式遊戲編程》通過近50個真實示例、近80個流程圖,
以直觀的方式闡述和還原遊戲製作的全過程,涵蓋了網絡遊戲設計的核心概念和實現,
包括遊戲主循環、線程、Actor模式、定時器、對像池、組件編碼、架構層的解耦等。
  
《多人在線遊戲架構實戰:基於C++的分佈式遊戲編程》既可以作為大學計算機相關專業網絡遊戲開發課程的參考書,
叉可以作為網絡遊戲行業從業人員的編程指南。

目錄大綱

前言
第1章網絡編程基礎1
1.1單機遊戲與網絡遊戲的區別1
1.2理解IP地址4
1.3理解TCP/IP 5
1.4阻塞式網絡編程7
1.4.1工程源代碼7
1.4.2服務端代碼分析9
1.4 .3客戶端代碼分析13
1.4.4差異14
1.4.5網絡底層函數說明14
1.4.6小結17
1.5非阻塞網絡編程17
1.5.1工程源代碼18
1.5.2服務端代碼分析19
1.5.3客戶端代碼分析21
1.5.4小結23
1.6總結24

第2章網絡IO多路復用25
2.1 Select網絡模型25
2.1.1 ::select函數說明25
2.1.2工程源代碼27
2.1.3網絡基類: Network 29
2.1.4 NetworkListen分析31
2.1.5 Server流程詳解35
2.1.6 NetworkConnector分析37
2.1.7測試流程詳解39
2.1.8 ConnectObj分析41
2.1.9 Buffer分析42
2.1.10 RecvNetworkBuffer分析44
2.1.11 SendNetworkBuffer分析48
2.1.12 Packet分析50
2.1.13小結55
2.2 Epoll網絡模型55
2.2.1函數說明56
2.2.2源代碼分析57
2.2.3小結60
2.3網絡協議: protobuf 61
2.3.1在Windows下編譯使用protobuf 62
2.3.2在Linux下編譯使用protobuf 64
2.3.3使用protobuf定義協議66
2.4總結69

第3章線程、進程以及Actor模型70
3.1遊戲架構概述70
3.1. 1無服務端遊戲70
3.1.2單進程CS架構71
3.1.3多進程CS架構71
3.2框架瓶頸72
3.2.1滾服遊戲72
3.2.2副本遊戲73
3.2.3大圖分割空間遊戲73
3.3設計遊戲框架74
3.4遊戲主循環76
3.5理解進程和線程77
3.5.1進程是什麼77
3.5.2線程是什麼78
3.5.3 C++標準線程庫79
3.6 Actor模型82
3.7遊戲框架中的線程84
3.7.1包裹類ThreadObject 85
3.7.2線程類Thread 85
3.7.3線程管理類ThreadMgr 86
3.7.4 libserver庫與遊戲邏輯88
3.8 Actor對象之間的消息處理機制92
3.8.1消息定義原則93
3.8.2消息隊列機制94
3.9總結99

第4章賬號登錄與驗證100
4.1登錄流程圖100
4.2製作一個簡單的驗證接口101
4.2. 1 Nginx參考配置102
4.2.2 php-fpm參考配置103
4.3導入PHP登錄接口104
4.3.1修改PHP中的數據庫配置104
4.3.2導入測試賬號105
4.3.3批量生成賬號105
4.4編碼中用到的第三方庫106
4.4.1庫libcurl 106
4.4.2庫libjsoncpp 107
4.5賬號驗證代碼分析108
4.5.1定義登錄協議號108
4.5.2處理協議的Account類110
4.5.3 Account類如何放置到線程中110
4.5.4處理驗證的HttpRequestAccount類112
4.6結果測試115
4.7消息過濾機制116
4.8測試機器人118
4.8.1狀態機119
4.8.2狀態機基類120
4.8.3狀態機管理類120
4.8.4 Robot類中的狀態機122
4.9批量登錄測試125
4.10總結126

第5章性能優化與對像池127
5.1 Visual Studio性能工具127
5.2內存中的數據結構131
5.2.1交換型數據結構131
5.2.2刷新型數據結構135
5.3 gprof 137
5.3.1 gprof調用堆棧圖138
5.3.2讓進程安全退出139
5.3.3用gprof工具查看框架141
5.4 valgrind 145
5.5對像池150
5.5.1對象池代碼分析150
5.5.2使用cmd命令查看對像池154
5.6總結155

第6章搭建ECS框架156
6.1一個簡單的ECS工程156
6.1.1組件類Component 157
6.1.2實體類Entity 158
6.1.3類System 158
6.1.4管理類EntitySystem 159
6.1.5測試161
6.2基於ECS框架的libserver 162
6.2.1通過字符串動態創建類163
6.2 .2提供多參變量來創建實例168
6.2.3 EntitySystem的工作原理171
6.3基於ECS框架的login和robots工程177
6.3.1 Account類177
6.3.2動態創建組件或實例178
6.3.3 ECS框架下的網絡通信185
6.3.4執行效率188
6.4 YAML文件189
6.4.1 YAML編譯安裝189
6.4.2讀取YAML配置文件191
6.4.3合併線程195
6.5 log4cplus日誌197
6.5.1 log4cplus的編譯安裝197
6.5.2配置文件198
6.5.3使用log4cplus 200
6.6總結202

第7章MySQL數據庫203
7.1 MySQL Connector/C 203
7.2連接時使用的函數說明204
7.3數據庫連接組件206
7.3.1 MysqlConnector組件206
7.3.2連接數據庫206
7.3.3關閉連接207
7.4寫入數據時使用的函數說明208
7.5寫入數據示例209
7.5.1創建預處理209
7.5.2用預處理創建角色211
7.6查詢數據時使用的函數說明215
7.7查詢數據示例216
7.7.1 Query查詢函數216
7.7.2查詢玩家數據217
7.8數據表的創建與更新219
7.8 .1創建表221
7.8.2更新表224
7.8.3測試更新與創建組件225
7.9數據表中的數據結構與protobuf結構227
7.10角色查詢與創建流程229
7.10.1為login進程與dbmgr進程創建連接類229
7.10.2找到指定的NetworkConnector實例230
7.10.3創建角色232
7.10.4機器人登錄創建角色測試232
7.11總結233

第8章深入學習組件式編程234
8.1新的管理類SystemManager 234
8.1.1實體EntitySystem 236
8.1.2更新UpdateSystem 238
8.1.3消息MessageSystem 240
8.1.4測試執行效率242
8.2 allinone工程242
8.2.1新工程allinone 243
8.2.2協議是如何被轉發的244
8.2.3查看線程中的所有對象247
8.2.4測試執行效率248
8.3線程分類248
8.4 IAwakeSystem接口與對像池251
8.4.1 DynamicObjectPoolCollector對像池集合252
8.4.2全局單例對象253
8.4.3查看線程中的所有對象255
8.5主動銷毀對象258
8.5.1一般組件銷毀258
8.5.2引用計數銷毀對象259
8.6時間堆262
8.6.1堆實現代碼264
8.6.2時間堆組件265
8.7總結270

第9章服務器管理進程與HTTP 271
9.1啟動多個login進程271
9.2 appmgr進程272
9.3 HTTP 275
9.4使用Mongoose分析HTTP格式277
9.4.1 HTTP類型278
9.4.2接收HTTP數據279
9.4.3處理HTTP數據的協議號282
9.4.4收到HTTP請求是如何響應的283
9.4.5發送HTTP返回數據流程286
9.5為Packet定義新的網絡標識287
9.5.1使用網絡標識創建一個連接289
9.5.2使用網絡標識發送數據291
9.5.3向外部請求HTTP數據293
9.6 HTTP分塊295
9.7機器人測試批量登錄297
9.8總結300

第10章分佈式登錄與Redis內存數據庫301
10.1 game與space的定位301
10.1.1選擇合適的game進程305
10.1.2使用token登錄game進程307
10.1.3 Player組件308
10.2 Redis及其第三方庫309
10.2.1 Redis的安裝310
10.2.2 Redis命令行命令311
10.2.3 hireids庫312
10.2.4組件RedisConnector 314
10.2.5 Redis在login中的應用317
10.2.6 Redis在game中的應用323
10.2.7從Redis刪除數據325
10.3性能瓶頸分析327
10.3.1使用日誌查看瓶頸327
10.3.2優化MessageComponent組件329
10.3.3 ConnectObj內存組織331
10.4多進程登錄協議回顧332
10.5總結334

第11章分佈式跳轉方案335
11.1資源數據配置與讀取335
11.1.1資源管理類ResourceManager 336
11.1.2地圖資源管理類ResourceWorldMgr 337
11.1.3地圖資源類ResourceWorld 340
11.2地圖類World與代理類WorldProxy 343
11.2.1地圖類World 344
11.2.2為什麼需要WorldProxy 350
11.3分佈式地圖跳轉流程351
11.3.1發起跳轉協議的時機353
11.3.2跳轉協議的數據定義353
11.3.3目標代理地圖收到跳轉協議356
11.3.4網絡標識如何在網絡中傳遞357
11.3.5 space進程發送的協議如何轉發到客戶端360
11.4通過客戶端進入遊戲363
11.5玩家在WorldProxy之間的跳轉367
11.6總結374

第12章斷線與動態加載375
12.1玩家斷線375
12.1.1玩家在login進程中斷線376
12.1.2玩家在game進程中斷線376
12.1.3玩家斷線時World類的處理377
12.1.4玩家數據的讀取與保存377
12.1.5如何進入斷線之前的地圖381
12.2進程之間的斷線382
12.2.1 login進程斷線與重連382
12.2.2 game進程斷線與重連383
12.2.3 space進程斷線與重連385
12.2.4 appmgr進程斷線與重連387
12.3動態新增389
12.3.1 MoveComponent組件389
12.3.2新MoveSystem 391
12.3.3加載新392
12.3. 4測試移動394
12.4總結395
寫在後——如何構建自己的框架396