網(wǎng)絡多人游戲已經(jīng)成為游戲產(chǎn)業(yè)的重要組成部分,本書是一本深入探討關于網(wǎng)絡多人游戲編程的圖書。
全書分為13章,從網(wǎng)絡游戲的基本概念、互聯(lián)網(wǎng)、伯克利套接字、對象序列化、對象復制、網(wǎng)絡拓撲和游戲案例、延遲、抖動和可靠性、改進的延遲處理、可擴展性、安全性、真實世界的引擎、玩家服務、云托管專用服務器等方面深入介紹了網(wǎng)絡多人游戲開發(fā)的知識,既全面又詳盡地剖析了眾多核心概念。
本書的多數(shù)示例基于C 編寫,適合對C 有一定了解的讀者閱讀。本書既可以作為大學計算機相關專業(yè)的指導教程,也可以作為普通讀者學習網(wǎng)絡游戲編程的參考指南。
網(wǎng)絡多人游戲是一個數(shù)十億美元級的業(yè)務,其中的一些游戲吸引了數(shù)以千萬計的玩家。在這本實用且代碼豐富的指南中,作者將指導你完成多人游戲開發(fā)的各個方面,他們將帶你構建一個具有健壯性的多人游戲架構,并創(chuàng)建各個引擎級的系統(tǒng)。你將通過深入的代碼示例來學習兩個完整的游戲:一個動作游戲和一個實時戰(zhàn)略(RTS)游戲。
首先,本書從游戲開發(fā)zhe的角度回顧網(wǎng)絡和網(wǎng)絡編程的基本要素。接下來講解管理游戲數(shù)據(jù)傳輸、通過網(wǎng)絡更新游戲?qū)ο蠛徒M織加入游戲的設備。你將學習如何在互聯(lián)網(wǎng)固有的不一致性前提下,確?煽康男阅,以及如何設計游戲代碼以實現(xiàn)zui大的安全性和可擴展性。zui后,本書以解決兩個關鍵問題結束:結合玩家服務和將游戲托管在云端。
作者在美國南加州大學的多人游戲編程課程對本書的內(nèi)容進行了廣泛的測試,學生和正向網(wǎng)絡游戲遷移的游戲開發(fā)zhe都會從中受益。
本書包括以下內(nèi)容:
游戲如何進化以應對網(wǎng)絡環(huán)境的挑戰(zhàn);
在游戲開發(fā)中使用互聯(lián)網(wǎng)通信協(xié)議和標準;
使用多人網(wǎng)絡游戲中廣泛應用的Berkeley Socket;
規(guī)范游戲數(shù)據(jù)格式,實現(xiàn)高效的互聯(lián)網(wǎng)傳輸;
同步狀態(tài),使得所有玩家共享同一個世界;
組織大型游戲的網(wǎng)絡拓撲;
解決引起等待及數(shù)據(jù)丟失的延遲和抖動問題;
在不影響性能的前提下擴展游戲;
打擊安全漏洞和軟件作弊;
利用當前流行游戲引擎?D?DUnreal 4和Unity游戲引擎;
整合玩家服務,如比賽安排、成就和排行榜;
云端運行游戲服務器。
Joshua Glazer是Naked Sky Entertainment的CTO和創(chuàng)始人之一。Naked Sky Entertainment是一個游戲開發(fā)工作室,開發(fā)了很多游戲,如RoboBlitz、MicroBot、Twister Mania和手機端游戲Max Axe、Scrap Force。他為許多項目提供咨詢,包括Epic Games公司的《虛幻引擎》(Unreal Engine)、Riot Games公司的《英雄聯(lián)盟》(League of Legends)、THQ公司《毀滅全人類》(Destroy All Humans),還包括藝電(Electronic Arts)、Midway、微軟(Microsoft)和派拉蒙電影公司(Paramount Pictures)等公司的很多項目。Joshua也是南加州大學(USC)的兼職講師,講授多人游戲編程和游戲引擎開發(fā)。
Sanjay Madhav是南加州大學(USC)的gao級講師,講授游戲編程、游戲引擎、數(shù)據(jù)結構和編譯器知識。他在藝電(Electronic Arts)、Neversoft和Pandemic Studio做過開發(fā)zhe,涉足的游戲有《榮譽勛章:血戰(zhàn)太平洋》(Medal of Honor: Pacific Assault)、《托尼霍克極限滑板8》(Tony Hawks Project 8)、《指環(huán)王:征服》(Lord of the Rings: Conquest)和《破壞者》(The Saboteur)等。他也是《Game Programming Algorithms and Techniques》的作者之一。
第1章 網(wǎng)絡游戲概述1
1.1 多人游戲的簡要歷程1
1.1.1 本地多人游戲1
1.1.2 早期網(wǎng)絡多人游戲1
1.1.3 多用戶網(wǎng)絡游戲2
1.1.4 局域網(wǎng)游戲3
1.1.5 在線游戲3
1.1.6 大規(guī)模多人在線游戲4
1.1.7 移動網(wǎng)絡游戲4
1.2 星際圍攻:部落5
1.2.1 平臺數(shù)據(jù)包模塊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 其他系統(tǒng)9
1.3 帝國時代10
1.3.1 輪班計時器11
1.3.2 同步12
1.4 總結13
1.5 復習題13
1.6 延伸的閱讀資料14
第2章 互聯(lián)網(wǎng)15
2.1 起源:分組交換15
2.2 TCP/IP模型17
2.3 物理層18
2.4 鏈路層18
2.5 網(wǎng)絡層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 創(chuàng)建Socket61
3.2 API操作系統(tǒng)差異63
3.3 socket地址66
3.3.1 類型安全68
3.3.2 用字符串初始化sockaddr70
3.3.3 綁定socket73
3.4 UDP Socket74
3.5 TCP Socket79
3.5.1 通過連接的socket實現(xiàn)發(fā)送和接收80
3.5.2 類型安全的TCP Socket82
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 內(nèi)存流101
4.2.2 字節(jié)存儲次序的兼容性105
4.2.3 比特流109
4.3 引用數(shù)據(jù)115
4.3.1 內(nèi)聯(lián)或嵌入116
4.3.2 鏈接117
4.4 壓縮119
4.4.1 稀疏數(shù)組壓縮120
4.4.2 熵編碼121
4.4.3 定點123
4.4.4 幾何壓縮125
4.5 可維護性127
4.5.1 抽象序列化方向127
4.5.2 數(shù)據(jù)驅(qū)動的序列化129
4.6 總結132
4.7 復習題133
4.8 延伸的閱讀資料134
第5章 對象復制135
5.1 世界狀態(tài)135
5.2 復制對象135
5.2.1 對象創(chuàng)建注冊表139
5.2.2 一個數(shù)據(jù)包中的多個對象143
5.3 樸素的世界狀態(tài)復制方法144
5.4 世界狀態(tài)中的變化148
5.5 RPC作為序列化對象155
5.6 自定義解決方案158
5.7 總結159
5.8 復習題160
5.9 延伸的閱讀資料160
第6章 網(wǎng)絡拓撲和游戲案例161
6.1 網(wǎng)絡拓撲161
6.1.1 客戶端-服務器161
6.1.2 對等網(wǎng)絡163
6.2 客戶端-服務器的實現(xiàn)165
6.2.1 服務器和客戶端的代碼分離166
6.2.2 網(wǎng)絡管理器和歡迎新客戶端167
6.2.3 輸入共享和客戶端代理172
6.3 對等網(wǎng)絡的實現(xiàn)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 非網(wǎng)絡延遲195
7.1.2 網(wǎng)絡延遲198
7.2 抖動199
7.3 數(shù)據(jù)包丟失201
7.4 可靠性:TCP還是UDP202
7.5 數(shù)據(jù)包傳遞通知204
7.5.1 標記傳出的數(shù)據(jù)包205
7.5.2 接收數(shù)據(jù)包并發(fā)送確認206
7.5.3 接收確認并傳遞狀態(tài)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 通過技巧和優(yōu)化隱藏延遲243
8.4 服務器端回退244
8.5 總結245
8.6 復習題246
8.7 延伸的閱讀資料246
第9章 可擴展性247
9.1 對象范圍和相關性247
9.1.1 靜態(tài)區(qū)域248
9.1.2 使用視錐249
9.1.3 其他可見性技術250
9.1.4 不可見時的相關性252
9.2 服務器分區(qū)253
9.3 實例化255
9.4 優(yōu)先級和頻率255
9.5 總結256
9.6 復習題257
9.7 延伸的閱讀資料257
第10章 安全性259
10.1 數(shù)據(jù)包嗅探259
10.1.1 中間人攻擊259
10.1.2 在主機上的數(shù)據(jù)包嗅探262
10.2 輸入驗證263
10.3 軟件作弊檢測264
10.3.1 維爾福反作弊系統(tǒng)265
10.3.2 典獄長反作弊系統(tǒng)266
10.4 保護服務器267
10.4.1 分布式拒絕服務攻擊267
10.4.2 壞數(shù)據(jù)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 套接字和基本的網(wǎng)絡體系273
11.1.2 游戲?qū)ο蠛屯負?74
11.1.3 Actor復制275
11.1.4 遠程過程調(diào)用276
11.2 Unity277
11.2.1 傳輸層API278
11.2.2 游戲?qū)ο蠛屯負?78
11.2.3 生成對象和復制279
11.2.4 遠程過程調(diào)用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 網(wǎng)絡291
12.5 玩家統(tǒng)計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 行業(yè)工具306
13.2.1 REST307
13.2.2 JSON307
13.2.3 Node.JS308
13.3 概述和術語308
13.3.1 服務器游戲?qū)嵗?09
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 現(xiàn)代C 基礎329