發表於2024-12-25
遊戲服務器架構與優化 [Architecture and Optimization for Game Servers] pdf epub mobi txt 電子書 下載
(1)作者是資深服務器底層技術專傢、遊戲服務器開發專傢,20餘年經驗總結,曾在網易工作7年,參與過各種類型遊戲和應用的服務器的架構、設計和開發;
(2)針對各種遊戲和應用所對應的服務器類型,從單機到集群,有針對性地對服務器進行架構上的剖析和優化;
(3)極客邦科技(InfoQ)和Talkingdata增長黑客負責人於洋鼎力推薦。
這是一部從實操的角度講解各種類型的遊戲和應用服務器的架構、設計、開發和優化的著作。
作者是資深的遊戲服務器技術專傢和底層技術專傢,有20餘年開發和管理經驗,曾在網易工作7年,參與過各種類型的遊戲的研發。
本書針對MMORPG、SLG、卡牌、3D虛擬社區等各種遊戲,以及App、深度學習服務、商城等各種應用對應的各種類型的服務器的研發和優化給齣瞭具體的指導意見。從單機到集群,從基礎的網絡編程到分布式架構,由淺入深、承上啓下、前後呼應,整本書內容前後貫穿、邏輯縝密,對於開發和運維人員來說相當實用。
全書共13章,分為三個部分:
第一部分(第1~3章) 網絡和服務器
本書以Python為描述語言,所以首先詳細講解瞭Python中的網絡編程模塊,然後講解瞭服務器相關的通信加密、WebSocket、多綫程等技術。
第二部分(第4~5章) 存儲和數據庫
這部分首先講解瞭數據庫存儲的基礎知識,如內存數據同步、數據備份與恢復、SQLite等;然後重點介紹瞭高並發服務器的存儲方案、高速緩存方案、二進製緩存方案、大規模計算方案,以及基於區塊鏈技術的存儲方案。
第三部分(第6~13章) 服務器架構及其優化
第6章和第7章介紹瞭服務器的架構演變以及不同類型的遊戲服務器各自是如何交互的;第8章和第9章詳細講解瞭遊戲大廳和實時交互服務器的架構、開發和優化;第10章講解瞭天梯和經濟係統的開發與設計;第11章講解瞭服務器的承載量以及客戶端的優化方案;第12章介紹瞭分布式服務器相關的技術;第13章從語言的角度對遊戲服務器開發的技術選型給齣瞭非常全麵的分析。
蔡能(DarkSpy)
資深服務器底層技術專傢和遊戲服務器開發專傢,有超過20年的編碼和團隊管理經驗,是網易的早期員工之一。
在遊戲開發領域有非常深厚的積纍,帶領團隊開發瞭各種類型(PC遊戲、手遊、頁遊、2D遊戲、3D遊戲、VR/AR遊戲等)的遊戲和應用服務器,對服務器的架構、編寫、優化和並發策略有深刻的認識和獨到的見解;在C/C++、Python、PHP等技術領域的經驗十分豐富。
1996~2009年期間,曾編寫過極富盛名的EasyCode和EasyCode Pro,以及其他被收錄到各大雜誌典藏光碟的軟件,EasyCode 在參加《程序員》網站舉辦的”中國共享軟件評比”活動時得票數在同類軟件中名列前茅。是《程序員》雜誌2007~2008年C/C++領域的點評專傢,擅長軟件架構和底層技術。2013年7月,接受《今日早報》關於遊戲行業的采訪。
現在有越來越多的年輕人通過玩遊戲來釋放工作壓力。因此,如何保障用戶在遊戲過程中能夠有一個流暢、穩定、愉悅的體驗,成為遊戲開發者的重中之重。
市麵上講服務器架構和優化的書也不少,在極客邦科技每年舉辦的 QCon 全球軟件開發大會、ArchSummit 全球架構師峰會等技術大會上,架構、性能優化也一直是受歡迎的主題。但是,由於遊戲行業的特殊性,專門闡述該行業架構和優化的論壇和書籍一直寥寥無幾。
蔡能是網易的早期員工,在軟件研發領域有著 20 多年的經驗,他這本書正好填補瞭這個空缺。無論你是遊戲開發者,還是運維工程師,在本書中,都能讓你對遊戲開發和運維所涉及到的核心技術有更深入的瞭解,從而幫助自己高質高效地完成現有工作。最終從更高的層麵去分析、解決業務問題,成為一名優秀的技術人員。
——霍泰穩 極客邦科技創始人兼 CEO
我內心深處,對遊戲行業的研發人員是極其尊敬的,因為他們要提供比金融機構更加準確和實時的服務體驗,容不得半點馬虎,否則就會遭遇玩傢的投訴,並讓用戶流失。而這其中,連通性和服務器開發則是重中之重。這本書會讓從事遊戲開發、架構和運維的工程師們受益良多,一方麵瞭解遊戲服務器開發與架構的邏輯,另一方麵是可以幫助大傢進一步拓展思路,觸發更多的思考。
——於洋 TalkingData Growth Hacker負責人
目 錄?Contents
前 言
第一部分 網絡和服務器
第1章 Python網絡編程模塊 2
1.1 Python Socket 3
1.1.1 Socket套接字 3
1.1.2 SOCK_STREAM、SOCK_DGRAM 4
1.1.3 阻塞和非阻塞模式 5
1.2 服務器端其他Socket方法 7
1.2.1 bind和listen 7
1.2.2 setsockopt 8
1.3 客戶端Socket 10
1.4 通用的Socket方法 12
1.4.1 recv和send 12
1.4.2 recvfrom和sendto 13
1.5 SimpleHTTPServer和BaseHTTPServer 14
1.5.1 SimpleHTTPServer 15
1.5.2 BaseHTTPServer 15
1.6 urllib和urllib2 17
1.6.1 urllib.urlopen和urllib2.urlopen 18
1.6.2 urllib2中的GET和POST方法 19
1.7 事件驅動框架Twisted 20
1.7.1 Reactor模式 21
1.7.2 run、stop和callLater 23
1.7.3 Transports、Protocols、Protocol Factoies以及Deferred 24
第2章 通信加密 26
2.1 軟件、通信加密的幾種常用方案 27
2.1.1 異或位運算加密 27
2.1.2 其他對稱加密 29
2.1.3 非對稱加密 30
2.2 OpenSSL 33
2.2.1 生成證書 35
2.2.2 公鑰和私鑰的配置 40
2.3 SSL/TLS通信 43
2.3.1 SSL/TLS連接 45
2.3.2 SSL/TLS HTTPS通信 46
2.4 其他加密方式 49
2.4.1 散列算法 49
2.4.2 BASE64 52
2.4.3 多國語言 53
第3章 服務器實作 55
3.1 構建Python Websocket服務器 55
3.1.1 Websocket的應用場景 57
3.1.2 實作Websocket握手協議 59
3.1.3 MAGIC_STRING在Websocket中的作用 60
3.1.4 Websocket 啓動 62
3.1.5 Websocket消息拆分和讀取 63
3.2 多綫程服務器 64
3.2.1 Python的多綫程模式 65
3.2.2 鎖 68
3.2.3 Python GIL 70
3.2.4 multiprocess的解決思路 72
3.2.5 給Websocket加上多綫程 73
3.3 綫程池 75
3.3.1 默認綫程池和進程池 75
3.3.2 協程 76
3.3.3 第三方庫 78
3.3.4 gevent的數據結構 85
第二部分 存儲與數據庫
第4章 基礎內容存儲 94
4.1 數據庫存儲的種類 95
4.2 SQL與NoSQL 96
4.2.1 SQL 96
4.2.2 SQL語句語法 97
4.2.3 NoSQL 101
4.2.4 NoSQL語句語法 106
4.3 內存與IO讀寫速度 108
4.4 同步內存數據 109
4.4.1 Redis數據庫的持久性 111
4.4.2 Redis主從數據庫復製 112
4.5 數據備份和恢復 113
4.5.1 備份的類型 114
4.5.2 使用Python編寫備份代碼 115
4.6 不可或缺的SQLite 117
第5章 存儲方案 121
5.1 高並發服務器的存儲方案 121
5.1.1 網站高並發服務器的策略 122
5.1.2 數據庫的鎖 125
5.2 高速緩存 127
5.2.1 Memcached 127
5.2.2 大文件緩存 129
5.2.3 分布式和集群 130
5.3 二進製存儲方案 132
5.3.1 磁盤IO和緩存 133
5.3.2 圖片和影音文件 134
5.4 大規模計算 135
5.4.1 圖片服務器的架構 136
5.4.2 讀取和寫入文本 137
5.4.3 文本搜索方案 138
5.5 區塊鏈技術 139
第三部分 服務器架構及其方案
第6章 遊戲服務器初探 144
6.1 服務器消息和輪詢 144
6.1.1 卡牌遊戲和弱連接 145
6.1.2 消息的輪詢 147
6.2 遊戲服務器架構演變 149
6.2.1 “上古時代”的遊戲服務器 149
6.2.2 近代的網絡遊戲服務器 153
6.2.3 近現代經典遊戲服務器模型 155
6.3 地圖的無縫連接 157
6.3.1 無縫連接的分析 158
6.3.2 無縫地圖更深層次的問題 160
第7章 遊戲服務器的交互 165
7.1 無狀態和有狀態的服務器設計方案 165
7.1.1 無狀態的服務器設計方案 166
7.1.2 有狀態的服務器設計方案 167
7.2 輪詢 169
7.3 集群方案 171
7.3.1 集群的幾種方式 171
7.3.2 集群的方案 172
7.3.3 數據庫方案 173
7.3.4 Web服務和數據庫 174
7.3.5 其他方案 176
7.4 定時任務 178
第8章 遊戲大廳 181
8.1 大廳登錄流程 181
8.1.1 登錄和選擇遊戲區 182
8.1.2 注冊和登錄 183
8.2 中間件 185
8.2.1 中間件的相關概念 186
8.2.2 ElasticSearch 191
8.2.3 在Python中使用ES 193
8.3 聊天服務 195
8.3.1 聊天服務器的搭建 195
8.3.2 聊天內容的獲取和分發 196
8.4 大廳與遊戲的對接 198
8.4.1 創建房間 198
8.4.2 與遊戲的對接 199
第9章 實時交互服務器 202
9.1 長連接和強交互 202
9.1.1 TCP連接 203
9.1.2 多綫程 205
9.1.3 異步控製 206
9.1.4 加入隊列 207
9.2 使用UDP的方案 210
9.2.1 什麼是UDP協議 210
9.2.2 TCP協議和UDP協議的區彆 212
9.2.3 使用Python編寫UDP服務 214
9.2.4 加入多綫程 216
9.3 協議包的設計和實現 218
9.3.1 協議包頭和包身 219
9.3.2 協議包完整性 221
9.3.3 協議的加密和壓縮 222
9.3.4 協議包混淆 223
9.4 斷綫重連 224
第10章 天梯和經濟係統 227
10.1 什麼是天梯 227
10.1.1 天梯的框架 229
10.1.2 數據載入 230
10.2 天梯層級 231
10.3 經濟係統 234
10.3.1 經濟係
前 言
為什麼要寫這本書
在人們的觀念中,遊戲行業是一個既火爆又賺錢的行業,而遊戲開發在非遊戲開發人員的心裏,則是比較神奇的存在。隔行如隔山,遊戲究竟是如何開發的?遊戲服務器究竟又是怎樣工作的?
軟件服務器後颱開發人員對於遊戲服務器的開發充滿興趣,而對於本身就是遊戲開發者的人來說,對於更深層次的服務器邏輯,各種類型遊戲服務器的區分和編寫,各種平颱的優化,都需要進行更進一步的瞭解。
作為遊戲開發人員,H5 Game和Flash Game之間通信的差異在哪裏?MMORPG的服務器究竟該怎麼編寫?HTTPS通信和普通HTTPS協議有何區分?如何進行分布式編程?如何提高遊戲服務器的高並發量?這些都是需要重點關心的問題。
不僅僅是遊戲開發人員,作為普通後颱開發人員,配置負載均衡,利用後颱程序之間的相互通信進行負載,也是比較關心的問題。現今琳琅滿目的開發包、開發工具,讓這些事情變得事半功倍,在這樣的情況下,如何利用現有的工具來進行配置,提高並發量,或者如何利用分布式計算來提高業務效率、工作效率,盡其所能地發揮工具的最大效率,也成為我們必須麵對並解決的問題。
對於運維人員來說,麵對的不僅僅是服務於程序員的各種後颱配置,也需要集群配置、HTTPS,甚至各種類型數據庫的配置。
針對以上提到的所有問題,本書會進行深入挖掘。
本書中99%使用Python語言進行代碼或者僞代碼的編寫和說明,為什麼使用Python?這是因為雖然開發遊戲服務器的語言多種多樣,包括C/C++、Python、Node.JS等,但Python是目前上升熱度最快,且用戶呈直綫增長的一種語言,其簡潔的特性,就算是非專業程序員都可以很快掌握,學習成本不高,且能達到較為滿意的産齣。
從國內的情況來看,關於Python或遊戲開發的書籍都很多,但是將兩者閤二為一進行講解和說明的卻並不多見。筆者在幾十年的工作過程當中,經曆瞭各種各樣的項目,雖然大部分屬於遊戲行業,但其他行業也有涉及,比如視頻類網站、人工智能、區塊鏈等。在經曆這些項目的過程中,我看到很多的團隊和開發人員為瞭某一個項目和業務的功能進行各種細節上的取捨,或者各種沒有經驗一腳踩進大坑,這讓我萌生編寫本書的想法。我希望能盡一點微薄之力,將在遊戲後颱或其他後颱開發過程中所經曆的各種問題、優化方案及解決方案,進行一個提煉和匯總,如果能具體解決讀者的各種問題,那就是本書之幸,本人之福。
讀者對象
本書針對遊戲服務器、應用服務器後颱的優化、搭建以及應用進行講解和介紹。為瞭照顧各個層麵的讀者,本書使用的語言是Python 2.7版本,書中並沒有就Python基礎規則和語法做詳細介紹,因此要求讀者具有基本的Python編程知識,比如Python庫的導入、pip包安裝工具的使用、調用庫函數等基礎語法知識。事實上,如果你專心花上幾個小時的時間自學一下Python,就能具備Python的編程基礎。
本書對讀者的知識背景沒有特定要求,如果你擁有瞭Python編程基礎,看完本書應該對服務器端需要做什麼、應該做什麼、怎麼做,有瞭然於胸的感覺。具體來說,本書適閤以下幾類讀者閱讀:
遊戲服務器程序員。本書的核心命題就是遊戲服務器的優化,其中涉及遊戲服務器的基礎、搭建;Socket知識、HTTPS基礎;以及使用Python進行實作和優化。無論你是遊戲後颱開發人員還是客戶端開發人員,都可以從書中獲益。
應用服務器開發程序員。雖說遊戲服務器程序員是重點,但是我們的核心議題仍然是服務器後颱的開發,所以從這點來說,應用服務也是後颱程序,本書在剖析遊戲服務器後颱編寫和優化的同時,也涉及瞭分布式係統、集群,甚至Web服務器,或許在閱讀本書後你會迸發一些靈感。
運維工程師。事實上,隻要是服務器開發,都會涉及運維的工作,而一個好的運維,必須而且一定會涉及各種腳本語言的開發和對現有係統的擴展。當一個團隊中的程序員忙得不可開交的時候,一個好的運維能幫助程序員分擔40%甚至更多的工作量。本書也介紹和挖掘瞭後颱編碼過程中的各種配置和搭建,比如HTTPS的配置、Websocket的Python實現等。如果你是運維工程師,或多或少會從書中汲取一些知識。
Python程序員。Python能做什麼?它也能編寫遊戲服務器嗎?答案是肯定的。隻要你做得好,搭配得當,使用Python編寫遊戲後颱不會比其他語言差(比如Java),有時候甚至更方便。如果你是Python程序員,又希望涉獵遊戲後颱的開發,本書一定會對你有極大幫助。
如何閱讀本書
本書內容從邏輯上共分為三大部分。
第一部分的內容包括第1~3章,主要介紹瞭Python中網絡的基礎模塊、通信加密,以及一部分服務器實作。其中:
第1章的內容包含Socket套接字的介紹和使用、基礎send和recv方法、阻塞和非阻塞方式、urllib和urllib2等Python基礎庫的使用。
第2章介紹瞭通信加密,其中包括基礎的異或加密、對稱和非對稱加密,以及OpenSSL、SSL/TLS通信方式等的詳細介紹。
第3章開始使用Python代碼編寫實際可運行的服務器代碼,並介紹瞭Websocket協議、GIL的優劣,以及Python綫程池的使用。
第二部分的內容包括第4章和第5章的內容,介紹瞭基礎內存存儲和存儲方案。
第4章主要介紹瞭內存存儲的基礎內容,包括常用的幾種數據庫,內存與IO續寫速度,同步內存數據等。
第5章從存儲方案展開,結閤實例對幾種常用的存儲方案進行瞭介紹,如高並發服務器的存儲方案等。
第三部分內容包括第6~12章的內容,深度挖掘瞭分布式、集群、MMORPG服務器類型的交互、弱連接和長連接、服務器承載方案等。在大部分章節中,都包含瞭:
基本內容:有關本章所需要的知識點和內容的介紹。
代碼示例:在介紹完內容後,就會有代碼示例,以解決基本內容中所提齣的問題。
示例圖(錶):對於基本內容或者代碼示例介紹仍然不清楚的通過示例圖進行更詳細剖析。
結果:運行完代碼後可能獲得的結果。
除瞭以上內容外,書中還包含以下內容,目的是對書中涉及的特定內容進行解釋和說明:
本章小結:主要章節的結尾寫有“小結”,小結分為兩種。
內容小結:有關本章內容的總結。
代碼小結:對代碼進行總結,讓讀者對所閱讀的代碼有更深的認識。
粗體字:對於知識點的重要提示或者讀者容易混淆和忽略的地方,使用瞭粗字體進行瞭提示。
勘誤和支持
由於筆者水平有限且撰稿時間有限,書中難免會齣現一些錯誤或者不準確的地方,懇請讀者批評指正。讀者可通過以下途徑聯係並反饋建議或意見:
即時通信:添加個人QQ(37856)或微信(darkspycyber)反饋問題。
電子郵件:發送email到darkspycpp@gmail.com。
緻謝
在本書的撰寫過程中,筆者得到瞭來自多方的指導、幫助和支持。
首先要感謝的是機械工業齣版社華章公司的副總編輯楊福川老師。本書是筆者的處女作,楊老師在起初定內容和目錄的時候,不辭辛勞,耐心地 遊戲服務器架構與優化 [Architecture and Optimization for Game Servers] 下載 mobi epub pdf txt 電子書
~~~~~~~~~~~~~~~~~~~~~~~~~
評分~~~~~~~~~~~~~~~~~~~~~~~~~
評分~~~~~~~~~~~~~~~~~~~~~~~~~
評分~~~~~~~~~~~~~~~~~~~~~~~~~
評分~~~~~~~~~~~~~~~~~~~~~~~~~
評分~~~~~~~~~~~~~~~~~~~~~~~~~
評分~~~~~~~~~~~~~~~~~~~~~~~~~
評分~~~~~~~~~~~~~~~~~~~~~~~~~
評分~~~~~~~~~~~~~~~~~~~~~~~~~
遊戲服務器架構與優化 [Architecture and Optimization for Game Servers] pdf epub mobi txt 電子書 下載