-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
5/4 新書到! 4/27 新書到! 4/20 新書到! 4/13 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

多人在線游戲架構實戰:基于C++的分布式游戲編程

( 簡體 字)
作者:彭放類別:1. -> 遊戲 -> 遊戲程式
   2. -> 程式設計 -> C++ -> C++
譯者:
出版社:機械工業出版社多人在線游戲架構實戰:基于C++的分布式游戲編程 3dWoo書號: 53777
詢問書籍請說出此書號!

有庫存
NT定價: 545
折扣價: 490

出版日:11/1/2020
頁數:398
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787111667926
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

內容簡介:

本書主要講述大型多人在線游戲開發的框架與編程實戰,以實例的形式講解從零開始制作網絡游戲框架的完整過程,讓讀者了解網絡游戲制作中的所有細節。*終得到一個完整的、基于ECS模式的、高效的分布式服務端框架,一個可以登錄的客戶端以及用于驗證網絡游戲各個模塊功能的自動化測試系統。 全書共12章,從網絡游戲的底層網絡編程開始,逐步引導讀者深入網絡游戲開發的各個步驟。通過近50個真實示例、90個流程圖,以直觀的方式闡述和還原游戲制作的全過程,涵蓋網絡游戲設計的核心概念和實現:游戲主循環、線程、Actor模式、定時器、對象池、組件編碼、架構層的解耦等。
目錄:

第1章 網絡編程基礎1
1.1 單機游戲與網絡游戲的區別1
1.2 理解IP地址4
1.3 理解TCP/IP5
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 網絡基類:Network29
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 網絡協議:protobuf61
2.3.1 在Windows下編譯使用protobuf62
2.3.2 在Linux下編譯使用protobuf64
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 包裹類ThreadObject85
3.7.2 線程類Thread85
3.7.3 線程管理類ThreadMgr86
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 庫libcurl106
4.4.2 庫libjsoncpp107
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 gprof137
5.3.1 gprof調用堆棧圖138
5.3.2 讓進程安全退出139
5.3.3 用gprof工具查看框架141
5.4 valgrind145
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 組件類Component157
6.1.2 實體類Entity158
6.1.3 系統類System158
6.1.4 管理類EntitySystem159
6.1.5 測試161
6.2 基于ECS框架的libserver162
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 使用log4cplus200
6.6 總結202
第7章 MySQL數據庫203
7.1 MySQL Connector/C203
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 新的系統管理類SystemManager234
8.1.1 實體系統EntitySystem236
8.1.2 *新系統UpdateSystem238
8.1.3 消息系統MessageSystem240
8.1.4 測試執行效率242
8.2 allinone工程242
8.2.1 新工程allinone243
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章 服務器管理進程與HTTP271
9.1 啟動多個login進程271
9.2 appmgr進程272
9.3 HTTP275
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
**0章 分布式登錄與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 組件RedisConnector314
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
**1章 分布式跳轉方案335
11.1 資源數據配置與讀取335
11.1.1 資源管理類ResourceManager336
11.1.2 地圖資源管理類ResourceWorldMgr337
11.1.3 地圖資源類ResourceWorld340
11.2 地圖類World與代理類WorldProxy343
11.2.1 地圖類World344
11.2.2 為什么需要WorldProxy350
11.3 分布式地圖跳轉流程351
11.3.1 發起跳轉協議的時機353
11.3. 跳轉協議的數據定義353
11.3.3 目標代理地圖收到跳轉協議356
11.3.4 網絡標識如何在網絡中傳遞357
11.3.5 space進程發送的協議如何轉發到客戶端360
11.4 通過客戶端進入游戲363
11.5 玩家在WorldProxy之間的跳轉367
11.6 總結374
**2章 斷線與動態加載系統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 新系統MoveSystem391
12.3.3 加載新系統392
12.3.4 測試移動394
12.4 總結395
寫在*后——如何構建自己的框架396
序: