網絡多人游戲已經成為游戲產業的重要組成部分,本書是一本深入探討關于網絡多人游戲編程的圖書。 全書分為13章,從網絡游戲的基本概念、互聯網、伯克利套接字、對象序列化、對象復制、網絡拓撲和游戲案例、延遲、抖動和性、改進的延遲處理、可擴展性、安全性、真實世界的引擎、玩家服務、云托管專用服務器等方面深入介紹了網絡多人游戲開發的知識,既又詳盡地剖析了眾多核心概念。 本書的多數示例基于C 編寫,適合對C 有一定了解的讀者閱讀。本書既可以作為大學計算機相關專業的指導教程,也可以作為普通讀者學習網絡游戲編程的參考指南。
網絡多人游戲是一個數十億美元級的業務,其中的一些游戲吸引了數以千萬計的玩家。在這本實用且代碼豐富的指南中,作者將指導你完成多人游戲開發的各個方面,他們將帶你構建一個具有健壯性的多人游戲架構,并創建各個引擎級的系統。你將通過深入的代碼示例來學習兩個完整的游戲:一個動作游戲和一個實時戰略(RTS)游戲。 首先,本書從游戲開發zhe的角度回顧網絡和網絡編程的基本要素。接下來講解管理游戲數據傳輸、通過網絡更新游戲對象和組織加入游戲的設備。你將學習如何在互聯網固有的不一致性前提下,確保的性能,以及如何設計游戲代碼以實現zui大的安全性和可擴展性。zui后,本書以解決兩個關鍵問題結束:結合玩家服務和將游戲托管在云端。 作者在美國南加州大學的多人游戲編程課程對本書的內容進行了廣泛的測試,學生和正向網絡游戲遷移的游戲開發zhe都會從中受益。 本書包括以下內容: 游戲如何進化以應對網絡環境的挑戰; 在游戲開發中使用互聯網通信協議和標準; 使用多人網絡游戲中廣泛應用的Berkeley Socket; 規范游戲數據格式,實現高效的互聯網傳輸; 同步狀態,使得所有玩家共享同一個世界; 組織大型游戲的網絡拓撲; 解決引起等待及數據丟失的延遲和抖動問題; 在不影響性能的前提下擴展游戲; 打擊安全漏洞和軟件作弊; 利用當前流行游戲引擎?D?DUnreal 4和Unity游戲引擎; 整合玩家服務,如比賽安排、成就和排行榜; 云端運行游戲服務器。
Joshua Glazer是Naked Sky Entertainment的CTO和創始人之一。Naked Sky Entertainment是一個游戲開發工作室,開發了很多游戲,如RoboBlitz、MicroBot、Twister Mania和手機端游戲Max Axe、Scrap Force。他為許多項目提供咨詢,包括Epic Games公司的《虛幻引擎》(Unreal Engine)、Riot Games公司的《英雄聯盟》(League of Legends)、THQ公司《毀滅全人類》(Destroy All Humans),還包括藝電(Electronic Arts)、Midway、微軟(Microsoft)和派拉蒙電影公司(Paramount Pictures)等公司的很多項目。Joshua也是南加州大學(USC)的兼職講師,講授多人游戲編程和游戲引擎開發。 Sanjay Madhav是南加州大學(USC)的gao級講師,講授游戲編程、游戲引擎、數據結構和編譯器知識。他在藝電(Electronic Arts)、Neversoft和Pandemic Studio做過開發zhe,涉足的游戲有《榮譽勛章:血戰太平洋》(Medal of Honor: Pacific Assault)、《托尼霍克極限滑板8》(Tony Hawk’s Project 8)、《指環王:征服》(Lord of the Rings: Conquest)和《破壞者》(The Saboteur)等。他也是《Game Programming Algorithms and Techniques》的作者之一。
第1章網絡游戲概述 1
1.1多人游戲的簡要歷程 1
1.1.1本地多人游戲 1
1.1.2早期網絡多人游戲 1
1.1.3多用戶網絡游戲 2
1.1.4局域網游戲 3
1.1.5在線游戲 3
1.1.6大規模多人在線游戲 4
1.1.7移動網絡游戲 4
1.2星際圍攻:部落 5
1.2.1平臺數據包模塊 7
1.2.2連接管理器 7
1.2.3流管理器 8
1.2.4事件管理器 8
1.2.5ghost管理器 8
1.2.6移動管理器 9
1.2.7其他系統 9
1.3帝國時代 10
1.3.1輪班計時器 11
1.3.2同步 12
1.4總結 13
1.5復習題 13
1.6延伸的閱讀資料 14
第2章互聯網 15
2.1起源:分組交換 15
2.2TCP/IP模型 17
2.3物理層 18
2.4鏈路層 18
2.5網絡層 22
2.5.1IPv4 23
2.5.2IPv6 36
2.6傳輸層 37
2.6.1UDP 38
2.6.2TCP 39
2.7應用層 48
2.7.1DHCP 49
2.7.2DNS 49
2.8NAT 50
2.9總結 56
2.10復習題 57
2.11延伸的閱讀資料 58
第3章伯克利套接字 61
3.1創建Socket 61
3.2API操作系統差異 63
3.3socket地址 66
3.3.1類型安全 68
3.3.2用字符串初始化sockaddr 70
3.3.3綁定socket 73
3.4UDP Socket 74
3.5TCP Socket 79
3.5.1通過連接的socket實現發送和接收 80
3.5.2類型安全的TCP Socket 82
3.6阻塞和非阻塞I/O 84
3.6.1多線程 85
3.6.2非阻塞I/O 86
3.6.3Select 88
3.7其他Socket選項 92
3.8總結 94
3.9復習題 94
3.10延伸的閱讀資料 95
第4章對象序列化 97
4.1序列化的需求 97
4.2流 100
4.2.1內存流 101
4.2.2字節存儲次序的兼容性 105
4.2.3比特流 109
4.3引用數據 115
4.3.1內聯或嵌入 116
4.3.2鏈接 117
4.4壓縮 119
4.4.1稀疏數組壓縮 120
4.4.2熵編碼 121
4.4.3定點 123
4.4.4幾何壓縮 125
4.5可維護性 127
4.5.1抽象序列化方向 127
4.5.2數據驅動的序列化 129
4.6總結 132
4.7復習題 133
4.8延伸的閱讀資料 134
第5章對象復制 135
5.1世界狀態 135
5.2復制對象 135
5.2.1對象創建注冊表 139
5.2.2一個數據包中的多個對象 143
5.3樸素的世界狀態復制方法 144
5.4世界狀態中的變化 148
5.5RPC作為序列化對象 155
5.6自定義解決方案 158
5.7總結 159
5.8復習題 160
5.9延伸的閱讀資料 160
第6章網絡拓撲和游戲案例 161
6.1網絡拓撲 161
6.1.1客戶端-服務器 161
6.1.2對等網絡 163
6.2客戶端-服務器的實現 165
6.2.1服務器和客戶端的代碼分離 166
6.2.2網絡管理器和歡迎新客戶端 167
6.2.3輸入共享和客戶端 172
6.3對等網絡的實現 177
6.3.1歡迎新對等體和開始游戲 179
6.3.2命令共享和鎖步回合制 181
6.3.3保持同步 187
6.4總結 192
6.5復習題 192
6.6延伸的閱讀資料 193
第7章延遲、抖動和性 195
7.1延遲 195
7.1.1非網絡延遲 195
7.1.2網絡延遲 198
7.2抖動 199
7.3數據包丟失 201
7.4性:TCP還是UDP 202
7.5數據包傳遞通知 204
7.5.1標記傳出的數據包 205
7.5.2接收數據包并發送確認 206
7.5.3接收確認并傳遞狀態 211
7.6對象復制性 216
7.7模擬真實世界的條件 224
7.8總結 226
7.9復習題 227
7.10延伸的閱讀資料 228
第8章改進的延遲處理 229
8.1沉默的客戶終端 229
8.2客戶端插值 231
8.3客戶端預測 233
8.3.1航位推測法 236
8.3.2客戶端移動預測和重放 238
8.3.3通過技巧和優化隱藏延遲 243
8.4服務器端回退 244
8.5總結 245
8.6復習題 246
8.7延伸的閱讀資料 246
第9章可擴展性 247
9.1對象范圍和相關性 247
9.1.1靜態區域 248
9.1.2使用視錐 249
9.1.3其他可見性技術 250
9.1.4不可見時的相關性 252
9.2服務器分區 253
9.3實例化 255
9.4優先級和頻率 255
9.5總結 256
9.6復習題 257
9.7延伸的閱讀資料 257
第10章安全性 259
10.1數據包嗅探 259
10.1.1中間人攻擊 259
10.1.2在主機上的數據包嗅探 262
10.2輸入驗證 263
10.3軟件作弊檢測 264
10.3.1維爾福反作弊系統 265
10.3.2典獄長反作弊系統 266
10.4保護服務器 267
10.4.1分布式拒絕服務攻擊 267
10.4.2壞數據 267
10.4.3時序攻擊 268
10.4.4入侵 269
10.5總結 270
10.6復習題 271
10.7延伸的閱讀資料 271
第11章真實世界的引擎 273
11.1虛幻引擎4 273
11.1.1套接字和基本的網絡體系 273
11.1.2游戲對象和拓撲 274
11.1.3Actor復制 275
11.1.4遠程過程調用 276
11.2Unity 277
11.2.1傳輸層API 278
11.2.2游戲對象和拓撲 278
11.2.3生成對象和復制 279
11.2.4遠程過程調用 279
11.2.5比賽安排 280
11.3總結 280
11.4復習題 281
11.5延伸的閱讀資料 281
第12章玩家服務 283
12.1選擇一種玩家服務 283
12.2基本設置 283
12.2.1初始化、運行和關閉 285
12.2.2用戶ID和名稱 286
12.3游戲大廳和比賽安排 287
12.4網絡 291
12.5玩家統計 294
12.6玩家成就 299
12.7排行榜 300
12.8其他服務 302
12.9總結 303
12.10復習題 303
12.11延伸的閱讀資料 304
第13章云托管專用服務器 305
13.1托管或不托管 305
13.2行業工具 306
13.2.1REST 307
13.2.2JSON 307
13.2.3Node.JS 308
13.3概述和術語 308
13.3.1服務器游戲實例 309
13.3.2游戲服務器進程 309
13.3.3游戲服務器 310
13.3.4硬件 311
13.4本地服務器進程管理器 311
13.5虛擬機管理器 318
13.6總結 327
13.7復習題 328
13.8延伸的閱讀資料 328
附錄A現代C 基礎 329
對于任何有抱負的游戲程序員,推薦閱讀這本書。Glazer和Madhav是解釋多人游戲關鍵概念的zui佳人選。 ——Zach Metcalf,Rockstar Games和 USC Games Alum的游戲開發zhe