第0章 [ 快速入門] 網絡遊戲編程網絡和遊戲編程的技術基礎 001
0.1 網絡遊戲開發者所需瞭解的網絡編程基礎 003
0.1.1 網絡編程是必需的 003
0.1.2 網絡編程與互聯網編程 003
0.1.3 互聯網編程的曆史和思想 004
0.1.4 OSI 參考模型——透明地處理標準和硬件的變化 004
0.1.5 網絡遊戲係統及其層次結構 005
0.1.6 套接字API 的基礎知識 006
0.1.7 網絡遊戲和套接字API——使用第4 層的套接字API 007
專欄 網絡編程的特性和遊戲架構的關係 008
0.2 套接字編程入門——處理多個並發連接、追求性能 010
0.2.1 通信鏈路的確定(復習) 010
0.2.2 套接字API 基礎—— 一個簡單的ECHO 服務器、ECHO 客戶端示例 011
0.2.3 TCP 通信鏈路的狀態遷移和套接字API 012
0.2.4 處理多個並發連接——通嚮異步套接字API 之路 015
0.2.5 同步調用(阻塞)和綫程 016
0.2.6 單綫程、非阻塞、事件驅動——使用select 函數進行輪詢 017
0.2.7 網絡遊戲輸入輸齣的特點——單綫程、事件驅動、非阻塞 018
0.2.8 網絡遊戲和實現語言 018
0.2.9 充分發揮性能和提高開發效率——從實現語言到底層結構 018
0.2.10 發揮多核服務器的性能 020
專欄 輸入輸齣的實現方針和未來提高性能的可能性 020
0.2.11 多核處理器與網絡吞吐量——網絡遊戲與小數據包 021
0.2.12 簡化服務器實現——libevent 025
0.3 RPC 指南——最簡單的通信中間件 026
0.3.1 通信庫的必要性 026
0.3.2 網絡遊戲中使用的RPC 的整體結構 028
0.3.3 [補充] UDP 的使用 030
0.4 遊戲編程基礎 031
0.4.1 遊戲編程的曆史 031
0.4.2 采用“隻要能畫點就能做齣遊戲”的方針來開發入侵者遊戲 031
0.4.3 遊戲編程的基本剖析 032
0.4.4 遊戲編程精粹——不使用綫程的“任務係統” 040
0.4.5 兩種編程方法的相似性——不使用綫程 040
0.5 小結 041
專欄 確保開發效率和各平颱之間的可移植性 041
第1章 網絡遊戲的曆史和演化遊戲進入瞭網絡世界 043
1.1 網絡遊戲的技術曆史 045
1.1.1 網絡遊戲齣現前的50 年 045
1.1.2 20 世紀50 年代前:計算機誕生 045
1.1.3 20 世紀50 年代:早期的電子遊戲 046
1.1.4 20 世紀60 年代:各種頗具影響的機器登上曆史舞颱 046
1.1.5 20 世紀70 年代:網絡遊戲的基本要素 050
1.1.6 20 世紀80 年代:網絡對戰遊戲登場 051
1.1.7 20 世紀90 年代:遊戲市場擴大 052
1.1.8 本世紀前10 年的前期:網絡遊戲商業化 055
1.1.9 本世紀前10 年的後半期:基於Web 瀏覽器的MMOG 在商業上獲得成功 056
1.1.10 2010 年之後:究竟會齣現怎麼樣的遊戲呢? 057
1.2 從技術變遷看遊戲文化和經濟圈 057
1.2.1 解讀技術發展圖 057
1.2.2 3 個圈(三大範疇) 057
1.2.3 兩個遊戲經濟/文化圈 059
1.2.4 文化、經濟與技術的關係 061
1.3 小結 062
專欄 成為齣色的網絡遊戲開發程序員的條件 062
第2章 何為網絡遊戲網絡遊戲麵麵觀 063
2.1 網絡遊戲術語的定義 065
網絡遊戲的4 個層麵 065
2.2 網絡遊戲的物理層麵 066
2.2.1 物理構成要素 066
2.2.2 物理模式/ 物理上的網絡構成 067
2.3 網絡遊戲的概念層麵 069
2.3.1 網絡遊戲及其基本結構 069
2.3.2 遊戲進行空間——進行遊戲時所需的所有信息 070
2.3.3 遊戲的進展——遊戲進行空間的變化 070
2.3.4 共享相同的遊戲進展 071
2.4 網絡遊戲的商業層麵 072
2.4.1 商業層麵的要求 072
2.4.2 有效地招募測試玩傢——網絡遊戲與測試 073
2.4.3 不斷更新——網絡遊戲的運營和更新 074
2.4.4 節約服務器數量和帶寬——網絡遊戲開支的特殊性 076
2.4.5 從小規模開始,確保可擴展性—— 將風險降到最低,不要錯過取勝的機會 077
2.4.6 提供多種收費方式——收費結算方式的變化 077
2.4.7 低價、快速地根除攻擊者——攻擊、非法行為及其對策 079
2.4.8 減少服務器停止的次數和時間——不要讓玩傢失望 080
2.4.9 反饋遊戲結果——日誌分析和結果的可視化 082
2.4.10 更容易地與其他玩傢相遇——玩傢匹配 084
2.5 網絡遊戲的人員和組織 085
2.5.1 與網絡遊戲服務的運營相關的人員 085
2.5.2 網絡遊戲服務運營的3 項專門職責 086
2.5.3 開發團隊 087
2.5.4 運維團隊 089
2.6 網絡遊戲程序員所需的知識 090
2.6.1 網絡遊戲程序員所需的技術和經驗 090
2.6.2 各種網絡遊戲開發知識 095
2.7 支持網絡遊戲的技術的大類 095支持網絡遊戲的技術的4 種形式 096
2.8 影響開發成本的技術要素 097
2.8.1 網絡遊戲與如今的開發技術 097
2.8.2 支持網絡遊戲主體的3 大核心 098
2.9 小結 102
專欄 網絡遊戲編程的最大難點 103
第3章 網絡遊戲的架構挑戰遊戲的可玩性和技術限製 109
3.1 遊戲編程的特性——保持快速響應 111
3.1.1 響應速度的重要性——時間總是不夠的 111
3.1.2 將數據存放在內存中的理由——遊戲編程真的有三大痛苦嗎 111
3.1.3 A 每16 毫秒變化一次——處理的信息及其大小 111
3.1.4 B 大量對象的顯示——CPU 的處理能力 114
3.1.5 C 無法預測玩傢的操作——遊戲狀態韆變萬化 117
3.1.6 必須將遊戲數據放在CPU 所在的機器上 117
3.2 網絡遊戲特有的要素 118
3.2.1 通信延遲——延遲對遊戲內容的限製 118
3.2.2 帶寬——傳輸量的標準 120
3.2.3 服務器——成本、服務器數量的估算 121
3.2.4 安全性——網絡遊戲的弱點 121
3.2.5 輔助係統(相關係統) 125
3.3 物理架構詳解——C/S 架構、P2P 架構 125
3.3.1 基本的網絡拓撲結構 125
3.3.2 物理架構的種類 127
3.3.3 C/S 架構——純服務器型、反射型 127
3.3.4 P2P 架構 129
3.3.5 C/S + P2P 混閤型架構 130
3.3.6 ad-hoc 模式 131
專欄 遊戲客戶端是什麼 131
3.4 邏輯架構詳解——MO 架構 132
3.4.1 MO、MMO 是什麼?——同時在綫數的區彆 132
3.4.2 MO 架構、MOG 133
3.4.3 同步方式——獲得全體玩傢的信息後,遊戲纔能繼續 133
3.4.4 同步方式/ 全網狀結構的實現——所有終端都擁有主數據 133
3.4.5 同步方式/ 星型結構——暫時將輸入信息集中到服務器上 139
3.4.6 異步方式——接受各終端上遊戲狀態的不一緻 142
3.4.7 三大基本要素:自己、對手、環境——異步實現的指導方針 143
3.4.8 A 自己和對手——對戰遊戲和玩傢之間往來數據的抽象程度 144
3.4.9 保持結果一緻性的方法——兩種覆蓋方式 148
3.4.10 B 自己和環境——可使用物品的格鬥遊戲和互斥控製 151
3.4.11 互斥控製的實現——采用與同步方式類似的機製來實現異步方式 152
3.4.12 狀態會自動變化的環境——靜態環境和動態環境 158
3.4.13 C 對手和環境的關係 162
3.5 邏輯架構詳解——MMO 架構 163
3.5.1 MMO 架構、MMOG——在大量玩傢之間共享長期存在的遊戲過程 164
3.5.2 MMOG 的結構 165
3.5.3 大型多人網絡遊戲(MMO) 168
3.6 小結 168
專欄 設法改善網頁遊戲的畫麵顯示間隔 169
第4章 [ 實踐] C/S MMO 遊戲開發長期運行的遊戲服務器 171
4.1 網絡遊戲開發的基本流程 173
4.1.1 項目文檔/ 交付物 173
4.1.2 開發的進行和文檔準備的流程 175
4.1.3 技術人員的文檔/ 交付物 176
4.2 C/S MMO 遊戲的發展趨勢和對策 177
4.2.1 C/S MMO 遊戲的特點 177
4.2.2 C/S MMO 架構(MMO 架構)特有的遊戲內容 177
4.3 策劃文檔和5 種設計文檔——從虛構遊戲K Online 的開發中學習 179
4.3.1 考慮示例遊戲的題材 179
4.3.2 詳細設計文檔 180
4.3.3 MMOG 龐大的遊戲設定 181
4.3.4 5 種設計文檔 182
4.3.5 設計上的重要判斷 182
4.4 係統基本結構圖的製定 184
4.4.1 係統基本結構圖的基礎 184
4.4.2 服務器必須具有可擴展性——商業模式的確認 184
4.4.3 各種瓶頸——擴展方式的選擇 184
專欄 MMO 客戶端特有的渲染性能瓶頸 186
4.4.4 解決遊戲服務器/ 數據庫的瓶頸 187
4.4.5 什麼都不做的情況(1 颱服務器負責整個遊戲世界) 188
4.4.6 空間分割法——解決遊戲服務器的瓶頸 189
4.4.7 實例法——解決遊戲服務器的瓶頸 190
4.4.8 平行世界方式——解決數據庫瓶頸 191
4.4.9 同時采用多種方法——應對越來越多的玩傢 193
4.4.10 各種方式的引入難度 194
4.4.11 各個世界中數據庫(遊戲數據庫)服務器的絕對性能的提高 194
4.4.12 K Online 的設計估算——首先從同時在綫數開始 195
4.4.13 根據遊戲邏輯的處理成本來估算——敵人的行動算法需要消耗多少CPU 196
4.1.14 根據遊戲數據庫的處理負荷進行估算——找到“角色數據的保存頻率”與“數據庫負荷”的關係 198
4.4.15 可擴展性的最低討論結果,追求進一步的用戶體驗 199
4.4.16 服務器的基本結構, 製定係統基本結構圖 200
4.5 進程關係圖的製定 201
4.5.1 進程關係圖的準備 201
4.5.2 服務器連接的結構——隻用空間分割法 202
4.5.3 服務器連接的結構——使用平行世界方式和空間分割法 203
4.5.4 使用平行世界方式進行擴展的關鍵點 204
4.6 帶寬/ 服務器資源估算文檔的製定 205
4.6.1 以進程列錶為基礎估算服務器資源 205
4.6.2 以CPU 為中心的服務器和以存儲為中心的服務器 208
4.6.3 服務器資源的成本估算——首先從初期費用開始 208
4.6.4 帶寬成本的估算 209
4.6.5 帶寬減半的方針——首先是調整策劃,然後在程序上下功夫 210
4.6.6 策劃內容的分析對帶寬的降低很有效 211
4.7 協議定義文檔的製定——協議的基本性質 211
4.7.1 協議定義文檔基礎 212
4.7.2 “協議的基本性質”的要點 212
4.7.3 協議的種類、以及進程之間關係的種類 213
4.7.4 8 種類型的協議 213
4.7.5 C/S MMO 采用TCP 214
4.7.6 與“協議的基本性質”的對應 214
4.8 協議定義文檔——協議的API 規範(概要) 217
4.8.1 協議的實現原則 217
4.8.2 8 種協議的功能/ 形式概述 221
4.9 協議定義文檔——協議的API 規範(詳細) 223
4.9.1 協議API 規範(詳細)的製定 224
4.9.2 API 的函數定義 224
4.9.3 常量定義 229
4.9.4 API 的調用時序 230
4.9.5 時序圖製定的要點 238
4.10 協議定義文檔——數據包的格式 238
4.10.1 C/S MMO 主要采用TCP(復習) 238
4.10.2 C/S MMO 使用包含專用字節數組的二進製協議 239
4.10.3 二進製協議的實現——首先從術語的整理開始 239
專欄 C/S MMO 的壓縮和加密 242
4.11 數據庫設計圖 242
4.11.1 要在編程之前進行對重要的錶進行設計 242
4.11.2 C/S MMO 中的數據庫實現的曆史變遷 243
4.11.3 整理K Online 所需的錶 245
專欄 百花繚亂的KVS 246
4.11.4 數據庫性能預測 250
4.12 服務器/ 客戶端軟件 + 中間件——實踐中不可或缺的開發基礎 254
4.12.1 網絡遊戲的中間件 254
4.12.2 開發的基礎軟件——可以立刻嘗試的C/S MMO 開發體驗 256
4.13 程序開發中的基本原則 258
4.13.1 如何開始編程、如何繼續編程 258
4.13.2 數據結構優先原則——基本原則 259
4.13.3 實現數據結構之前的討論——齣現在畫麵上和不齣現在畫麵上的元素 262
4.13.4 維持可玩狀態的原則——基本原則 263
4.13.5 後端服務器的延後原則——基本原則 264
4.13.6 持續測定的原則——基本原則 264
4.14 C/S MMO 遊戲K Online 的實現——編程開始! 266
4.14.1 開發的安排 266
4.14.2 K Online 中的分工計劃 267
4.14.3 K Online 中“框架階段”和“原型階段”的區彆 268
4.14.4 [ 步驟1~2] 框架~原型階段 269
專欄 每一步的進度管理形式 272
4.14.5 “不實際運行起來是不會理解的!”——遊戲開發的特殊性 274
專欄 C/C++ 以外的語言 275
4.14.6 框架的整體結構 276
專欄 VCE 是什麼 278
4.14.7 以怎樣的順序來編寫代碼 280
4.14.8 首先編寫協議定義文件k.xml——開發流程 280
4.14.9 協議定義的要點 281
4.14.10 通信連通確認:ping 函數 281
4.14.11 賬戶登錄和賬戶認證:signup 函數、authentication 函數 283
4.14.12 角色創建:createCharacter 函數 284
4.14.13 登錄:login 函數 285
4.14.14 在地麵上移動:move 函數、moveNotify 286
4.14.15 編寫gmsv/Makefile——開發流程 293
4.14.16 從示例中復製gmsv/climain.cpp 和gmsvmain.cpp——開發流程 .293
專欄 dbsv 服務器代碼的自動生成 297
4.14.17 自動測試客戶端autocli 的實現——開發流程 300
專欄 gmsv 中綫程的使用 305
4.14.18 圖形客戶端cli 的創建和運行確認——開發流程 307
4.14.19 框架之後的開發——開發流程、後續事項 310
4.15 總結 310
第5章 [ 實踐] P2P MO 遊戲開發
沒有專用服務器的動作類遊戲的實現 311
5.1 P2P MO 遊戲的特點和開發策略 313
5.1.1 P2P MO 和動作類遊戲——遊戲的狀態頻繁發生改變 313
5.1.2 RPC 和共享內存 313
5.1.3 P2P MO 遊戲的特點——和c/s MMO 遊戲的比較和難點 314
5.1.4 P2P MO 遊戲的優點 316
5.1.5 從概要設計開始考慮[多人遊戲模式] 316
5.2 J Multiplayer 遊戲開發案例的學習——和K Online 的不同 316
5.2.1 J Multiplayer ——和K Online 的比較 317
5.2.2 P2P MO 遊戲開發的基本流程 317
5.2.3 P2P MO 遊戲開發的交付産品——開發各個階段需要提交的資料 317
5.2.4 和C/S MMO 的數據量/規模的比較 319
5.3 P2P MO 遊戲的設計資料 319
5.3.1 係統基本結構圖 320
5.3.2 進程關係圖 320
5.3.3 帶寬/ 服務器資源計算資料 323
5.3.4 通信協議定義資料和API 規格 323
專欄 什麼是“遊戲邏輯” 324
5.3.5 帶寬消耗量的估算 327
5.3.6 其他資料 331
5.4 客戶端/ 服務器軟件+ 中間件、基本原則 332
5.4.1 P2P MO 開發的最終交付産品 332
5.4.2 P2P MO 中使用的中間件 333
5.4.3 編程時應該注意的基本原則——針對P2P MO 遊戲 333
5.5 P2P MO 遊戲J Multiplayer 的實現——正式開始編程 334
5.5.1 J Multiplayer 的編程計劃 334
5.5.2 開發流程——K Online 的迴顧 334
5.5.3 J Multiplayer 開發階段——開發順序和內容 335
5.5.4 第1 階段的要點 335
5.5.5 客戶端程序的開發案例 336
5.5.6 “共享內存方式”的實現——開始編碼 337
5.5.7 P2P MO 遊戲開發中該如何防止發生競爭狀態 339
5.5.8 共享內存開發方式該如何編碼——共享內存開發方式和RPC 開發方式的比較 343
5.5.9 SyncValue 類 347
專欄 數據中心的地理位置分布 352
5.6 支持C/S MO 遊戲的技術[ 補充] 353
5.6.1 C/S MO 和NAT 問題 353
5.6.2 什麼是NAT 問題 353
5.6.3 NAT 遍曆——解決NAT 問題建立通信路徑的技術 353
5.6.4 NAT 問題的實際解決方法 355
5.6.5 中繼服務器 356
5.6.6 中繼服務器的摺衷方案 356
5.7 總結 358
第6章 網絡遊戲的輔助係統完善遊戲服務的必要機製.... 359
6.1 輔助係統需要的各種功能 361
6.1.1 現有服務提供的輔助係統功能 361
6.1.2 現有服務的功能一覽 363
6.1.3 網頁遊戲開發方法和客戶端遊戲的開發方法 365
6.2 交流/ 通信功能 365
6.2.1 玩傢匹配 P2P MO 365
6.2.2 遊戲大廳 P2P MO 369
6.2.3 中繼服務器 P2P MO 370
6.2.4 聊天 P2P MO C/S MMO 371
6.2.5 郵件 P2P MO C/S MMO 374
6.2.6 好友列錶 P2P MO C/S MMO 374
6.2.7 玩傢狀態 P2P MO C/S MMO 375
6.2.8 加鎖服務器 P2P MO C/S MMO 376
6.2.9 黑名單 P2P MO C/S MMO 377
6.2.10 語音聊天 P2P MO C/S MMO 378
6.3 遊戲客戶端實現相關的輔助係統 378
6.3.1 玩傢成績管理 P2P MO C/S MMO 378
6.3.2 存儲功能 P2P MO 379
6.3.3 (遊戲客戶端)更新 P2P MO C/S MMO 380
6.3.4 排行榜 P2P MO C/S MMO 381
6.4 運營輔助係統 383
新聞發布 P2P MO C/S MMO 383
6.5 付費相關的輔助係統 384
6.5.1 付費認證 P2P MO C/S MMO 384
6.5.2 虛擬貨幣管理 P2P MO C/S MMO 387
專欄 C/S MMO 遊戲的收入 388
6.6 其他輔助功能 390
6.6.1 遊戲數據瀏覽/查詢工具 P2P MO C/S MMO 390
6.6.2 敏感詞過濾 P2P MO C/S MMO 392
6.7 本章小結 392
第7章 支持網絡遊戲運營的基礎設施架構、負荷測試和運營 393
7.1 基礎設施架構的基礎知識 395
7.1.1 C/S MMO 和P2P MO 的基礎設施(概要) 395
7.1.2 基礎設施架構需要進行的工作 ——從開發整體來看 395
7.1.3 基礎設施的成本估算 396
7.1.4 成本的概念、單位 397
7.1.5 網絡遊戲服務器在一定程度上可以接收的條件 398
7.1.6 硬件、信息設備 398
7.1.7 軟件 399
7.1.8 數據中心相關的成本 401
7.1.9 服務費(數據中心以外) 403
7.1.10 網絡帶寬費 403
7.1.11 電費 404
7.2 開發者需要知道的基礎設施架構技巧 404
7.2.1 服務規模的擴大/ 縮小——用戶數和需要的基礎設施規模 404
7.2.2 典型的環境 404
7.2.3 負荷麯綫 405
7.2.4 麵嚮開發者的基礎設施架構要點 407
7.2.5 服務器部署 407
7.2.6 登颱環境 409
7.2.7 服務器的監控、生死監控 410
7.2.8 日誌輸齣/ 管理 411
7.3 K Online 、J Multiplayer 遊戲的基礎設施架構 412
7.3.1 K Online 的基礎設施 413
7.3.2 J Multiplayer 的基礎設施 414
7.4 負荷測試 417
7.4.1 負荷測試的準備 417
7.4.2 K Online 在生産環境的負荷測試 417
7.4.3 負荷測試時使用的服務器監控命令 418
7.4.4 J Multiplayer 在生産環境下的負荷測試 422
7.5 遊戲上綫 423
7.5.1 遊戲上綫前——從確認安全設定開始 423
7.5.2 遊戲上綫後——係統監控 424
7.5.3 服務器的組群化 425
7.5.4 故障發生時的應對 427
7.6 本章小結 428
第8章 網絡遊戲的開發體製團隊管理的挑戰 429
8.1 遊戲的策劃內容和開發團隊 網絡遊戲特有的挑戰 431
8.1.1 遊戲的策劃內容是團隊管理的關鍵 431
8.1.2 遊戲數據的持久化 431
8.1.3 遊戲中玩傢之間的關係 432
8.1.4 遊戲結果的共享範圍 433
8.1.5 聊天係統的內容 434
8.1.6 維護和升級的計劃 434
8.1.7 代碼規模——如果需要迭代的代碼過多就會遇到問題 435
8.2 網絡遊戲開發團隊的實際情況——和一般軟件開發相同的地方 436
8.2.1 工作分配 436
8.2.2 持續提升網絡遊戲程序員技能的方法 438
8.2.3 項目管理術——遊戲開發和Scrum 440
8.2.4 開發環境的選擇 440
8.2.5 項目的移交——理所當然的事情也需要仔細歸納總結 441
8.3 本章小結 442
專欄 網絡遊戲開發的成本 443
· · · · · · (
收起)