網絡多人遊戲架構與編程 (Multiplayer Game Programming: Architecting Networked Games)
內容描述
網絡多人游戲已經成為游戲產業的重要組成部分,本書是一本深入探討關於網絡多人游戲編程的圖書。
全書分為13章,從網絡游戲的基本概念、因特網、伯克利套接字、對象序列化、對象復制、網絡拓撲和游戲案例、延遲、抖動和可靠性、改進的延遲處理、可擴展性、安全性、真實世界的引擎、玩家服務、雲托管專用服務器等方面深入介紹了網絡多人游戲開發的知識,既全面又詳盡地剖析了眾多核心概念。
本書的多數示例基於C++編寫,適合對C++有一定瞭解的讀者閱讀。本書既可以作為大學電腦相關專業的指導教程,也可以作為普通讀者學習網絡游戲編程的參考指南。
目錄大綱
第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.5 ghost管理器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.2 TCP/IP模型17
2.3物理層18
2.4鏈路層18
2.5網絡層22
2.5.1 IPv423
2.5.2 IPv636
2.6傳輸層37
2.6.1 UDP38
2.6.2 TCP39
2.7應用層48
2.7.1 DHCP49
2.7.2 DNS49
2.8 NAT50
2.9總結56
2.10複習題57
2.11延伸的閱讀資料58
第3章伯克利套接字61
3.1創建Socket61
3.2 API操作系統差異63
3.3 socket地址66
3.3.1類型安全68
3.3.2用字符串初始化sockaddr70
3.3.3綁定socket73
3.4 UDPSocket74
3.5 TCPSocket79
3.5.1通過連接的socket實現發送和接收80
3.5.2類型安全的TCPSocket82
3.6阻塞和非阻塞I/O84
3.6.1多線程85
3.6.2非阻塞I/O86
3.6.3 Select88
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.5 RPC作為序列化對象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還是UDP202
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虛幻引擎4273
11.1.1套接字和基本的網絡體系273
11.1.2遊戲對象和拓撲274
11.1.3 Actor複製275
11.1. 4遠程過程調用276
11.2 Unity277
11.2.1傳輸層API278
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.1 REST307
13.2.2 JSON307
13.2.3 Node.JS308
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
作者介紹
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》的作者之一。