定 價(jià):79 元
叢書(shū)名:游戲開(kāi)發(fā)與設(shè)計(jì)技術(shù)叢書(shū)
- 作者:蔡能
- 出版時(shí)間:2018/4/1
- ISBN:9787111595472
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類(lèi):TP317.6
- 頁(yè)碼:
- 紙張:膠版紙
- 版次:1
- 開(kāi)本:16開(kāi)
這是一部從實(shí)操的角度講解各種類(lèi)型的游戲和應(yīng)用服務(wù)器的架構(gòu)、設(shè)計(jì)、開(kāi)發(fā)和優(yōu)化的著作。
作者是資深的游戲服務(wù)器技術(shù)專(zhuān)家和底層技術(shù)專(zhuān)家,有20余年開(kāi)發(fā)和管理經(jīng)驗(yàn),曾在網(wǎng)易工作7年,參與過(guò)各種類(lèi)型的游戲的研發(fā)。
本書(shū)針對(duì)MMORPG、SLG、卡牌、3D虛擬社區(qū)等各種游戲,以及App、深度學(xué)習(xí)服務(wù)、商城等各種應(yīng)用對(duì)應(yīng)的各種類(lèi)型的服務(wù)器的研發(fā)和優(yōu)化給出了具體的指導(dǎo)意見(jiàn)。從單機(jī)到集群,從基礎(chǔ)的網(wǎng)絡(luò)編程到分布式架構(gòu),由淺入深、承上啟下、前后呼應(yīng),整本書(shū)內(nèi)容前后貫穿、邏輯縝密,對(duì)于開(kāi)發(fā)和運(yùn)維人員來(lái)說(shuō)相當(dāng)實(shí)用。
全書(shū)共13章,分為三個(gè)部分:
*部分(第1~3章) 網(wǎng)絡(luò)和服務(wù)器
本書(shū)以Python為描述語(yǔ)言,所以首先詳細(xì)講解了Python中的網(wǎng)絡(luò)編程模塊,然后講解了服務(wù)器相關(guān)的通信加密、WebSocket、多線程等技術(shù)。
第二部分(第4~5章) 存儲(chǔ)和數(shù)據(jù)庫(kù)
這部分首先講解了數(shù)據(jù)庫(kù)存儲(chǔ)的基礎(chǔ)知識(shí),如內(nèi)存數(shù)據(jù)同步、數(shù)據(jù)備份與恢復(fù)、SQLite等;然后重點(diǎn)介紹了高并發(fā)服務(wù)器的存儲(chǔ)方案、高速緩存方案、二進(jìn)制緩存方案、大規(guī)模計(jì)算方案,以及基于區(qū)塊鏈技術(shù)的存儲(chǔ)方案。
第三部分(第6~13章) 服務(wù)器架構(gòu)及其優(yōu)化
第6章和第7章介紹了服務(wù)器的架構(gòu)演變以及不同類(lèi)型的游戲服務(wù)器各自是如何交互的;第8章和第9章詳細(xì)講解了游戲大廳和實(shí)時(shí)交互服務(wù)器的架構(gòu)、開(kāi)發(fā)和優(yōu)化;第10章講解了天梯和經(jīng)濟(jì)系統(tǒng)的開(kāi)發(fā)與設(shè)計(jì);第11章講解了服務(wù)器的承載量以及客戶(hù)端的優(yōu)化方案;第12章介紹了分布式服務(wù)器相關(guān)的技術(shù);第13章從語(yǔ)言的角度對(duì)游戲服務(wù)器開(kāi)發(fā)的技術(shù)選型給出了非常全面的分析。
(1)作者是資深服務(wù)器底層技術(shù)專(zhuān)家、游戲服務(wù)器開(kāi)發(fā)專(zhuān)家,20余年經(jīng)驗(yàn)總結(jié),曾在網(wǎng)易工作7年,參與過(guò)各種類(lèi)型游戲和應(yīng)用的服務(wù)器的架構(gòu)、設(shè)計(jì)和開(kāi)發(fā);
(2)針對(duì)各種游戲和應(yīng)用所對(duì)應(yīng)的服務(wù)器類(lèi)型,從單機(jī)到集群,有針對(duì)性地對(duì)服務(wù)器進(jìn)行架構(gòu)上的剖析和優(yōu)化;
(3)極客邦科技(InfoQ)和Talkingdata增長(zhǎng)黑客負(fù)責(zé)人于洋鼎力推薦。
前 言
為什么要寫(xiě)這本書(shū)在人們的觀念中,游戲行業(yè)是一個(gè)既火爆又賺錢(qián)的行業(yè),而游戲開(kāi)發(fā)在非游戲開(kāi)發(fā)人員的心里,則是比較神奇的存在。隔行如隔山,游戲究竟是如何開(kāi)發(fā)的?游戲服務(wù)器究竟又是怎樣工作的?軟件服務(wù)器后臺(tái)開(kāi)發(fā)人員對(duì)于游戲服務(wù)器的開(kāi)發(fā)充滿(mǎn)興趣,而對(duì)于本身就是游戲開(kāi)發(fā)者的人來(lái)說(shuō),對(duì)于更深層次的服務(wù)器邏輯,各種類(lèi)型游戲服務(wù)器的區(qū)分和編寫(xiě),各種平臺(tái)的優(yōu)化,都需要進(jìn)行更進(jìn)一步的了解。
作為游戲開(kāi)發(fā)人員,H5 Game和Flash Game之間通信的差異在哪里?MMORPG的服務(wù)器究竟該怎么編寫(xiě)?HTTPS通信和普通HTTPS協(xié)議有何區(qū)分?如何進(jìn)行分布式編程?如何提高游戲服務(wù)器的高并發(fā)量?這些都是需要重點(diǎn)關(guān)心的問(wèn)題。
不僅僅是游戲開(kāi)發(fā)人員,作為普通后臺(tái)開(kāi)發(fā)人員,配置負(fù)載均衡,利用后臺(tái)程序之間的相互通信進(jìn)行負(fù)載,也是比較關(guān)心的問(wèn)題,F(xiàn)今琳瑯滿(mǎn)目的開(kāi)發(fā)包、開(kāi)發(fā)工具,讓這些事情變得事半功倍,在這樣的情況下,如何利用現(xiàn)有的工具來(lái)進(jìn)行配置,提高并發(fā)量,或者如何利用分布式計(jì)算來(lái)提高業(yè)務(wù)效率、工作效率,盡其所能地發(fā)揮工具的最大效率,也成為我們必須面對(duì)并解決的問(wèn)題。
對(duì)于運(yùn)維人員來(lái)說(shuō),面對(duì)的不僅僅是服務(wù)于程序員的各種后臺(tái)配置,也需要集群配置、HTTPS,甚至各種類(lèi)型數(shù)據(jù)庫(kù)的配置。
針對(duì)以上提到的所有問(wèn)題,本書(shū)會(huì)進(jìn)行深入挖掘。
本書(shū)中99%使用Python語(yǔ)言進(jìn)行代碼或者偽代碼的編寫(xiě)和說(shuō)明,為什么使用Python?這是因?yàn)殡m然開(kāi)發(fā)游戲服務(wù)器的語(yǔ)言多種多樣,包括C/C 、Python、Node.JS等,但Python是目前上升熱度最快,且用戶(hù)呈直線增長(zhǎng)的一種語(yǔ)言,其簡(jiǎn)潔的特性,就算是非專(zhuān)業(yè)程序員都可以很快掌握,學(xué)習(xí)成本不高,且能達(dá)到較為滿(mǎn)意的產(chǎn)出。
從國(guó)內(nèi)的情況來(lái)看,關(guān)于Python或游戲開(kāi)發(fā)的書(shū)籍都很多,但是將兩者合二為一進(jìn)行講解和說(shuō)明的卻并不多見(jiàn)。筆者在幾十年的工作過(guò)程當(dāng)中,經(jīng)歷了各種各樣的項(xiàng)目,雖然大部分屬于游戲行業(yè),但其他行業(yè)也有涉及,比如視頻類(lèi)網(wǎng)站、人工智能、區(qū)塊鏈等。在經(jīng)歷這些項(xiàng)目的過(guò)程中,我看到很多的團(tuán)隊(duì)和開(kāi)發(fā)人員為了某一個(gè)項(xiàng)目和業(yè)務(wù)的功能進(jìn)行各種細(xì)節(jié)上的取舍,或者各種沒(méi)有經(jīng)驗(yàn)一腳踩進(jìn)大坑,這讓我萌生編寫(xiě)本書(shū)的想法。我希望能盡一點(diǎn)微薄之力,將在游戲后臺(tái)或其他后臺(tái)開(kāi)發(fā)過(guò)程中所經(jīng)歷的各種問(wèn)題、優(yōu)化方案及解決方案,進(jìn)行一個(gè)提煉和匯總,如果能具體解決讀者的各種問(wèn)題,那就是本書(shū)之幸,本人之福。
讀者對(duì)象本書(shū)針對(duì)游戲服務(wù)器、應(yīng)用服務(wù)器后臺(tái)的優(yōu)化、搭建以及應(yīng)用進(jìn)行講解和介紹。為了照顧各個(gè)層面的讀者,本書(shū)使用的語(yǔ)言是Python 2.7版本,書(shū)中并沒(méi)有就Python基礎(chǔ)規(guī)則和語(yǔ)法做詳細(xì)介紹,因此要求讀者具有基本的Python編程知識(shí),比如Python庫(kù)的導(dǎo)入、pip包安裝工具的使用、調(diào)用庫(kù)函數(shù)等基礎(chǔ)語(yǔ)法知識(shí)。事實(shí)上,如果你專(zhuān)心花上幾個(gè)小時(shí)的時(shí)間自學(xué)一下Python,就能具備Python的編程基礎(chǔ)。
本書(shū)對(duì)讀者的知識(shí)背景沒(méi)有特定要求,如果你擁有了Python編程基礎(chǔ),看完本書(shū)應(yīng)該對(duì)服務(wù)器端需要做什么、應(yīng)該做什么、怎么做,有了然于胸的感覺(jué)。具體來(lái)說(shuō),本書(shū)適合以下幾類(lèi)讀者閱讀:
游戲服務(wù)器程序員。本書(shū)的核心命題就是游戲服務(wù)器的優(yōu)化,其中涉及游戲服務(wù)器的基礎(chǔ)、搭建;Socket知識(shí)、HTTPS基礎(chǔ);以及使用Python進(jìn)行實(shí)作和優(yōu)化。無(wú)論你是游戲后臺(tái)開(kāi)發(fā)人員還是客戶(hù)端開(kāi)發(fā)人員,都可以從書(shū)中獲益。
應(yīng)用服務(wù)器開(kāi)發(fā)程序員。雖說(shuō)游戲服務(wù)器程序員是重點(diǎn),但是我們的核心議題仍然是服務(wù)器后臺(tái)的開(kāi)發(fā),所以從這點(diǎn)來(lái)說(shuō),應(yīng)用服務(wù)也是后臺(tái)程序,本書(shū)在剖析游戲服務(wù)器后臺(tái)編寫(xiě)和優(yōu)化的同時(shí),也涉及了分布式系統(tǒng)、集群,甚至Web服務(wù)器,或許在閱讀本書(shū)后你會(huì)迸發(fā)一些靈感。
運(yùn)維工程師。事實(shí)上,只要是服務(wù)器開(kāi)發(fā),都會(huì)涉及運(yùn)維的工作,而一個(gè)好的運(yùn)維,必須而且一定會(huì)涉及各種腳本語(yǔ)言的開(kāi)發(fā)和對(duì)現(xiàn)有系統(tǒng)的擴(kuò)展。當(dāng)一個(gè)團(tuán)隊(duì)中的程序員忙得不可開(kāi)交的時(shí)候,一個(gè)好的運(yùn)維能幫助程序員分擔(dān)40%甚至更多的工作量。本書(shū)也介紹和挖掘了后臺(tái)編碼過(guò)程中的各種配置和搭建,比如HTTPS的配置、Websocket的Python實(shí)現(xiàn)等。如果你是運(yùn)維工程師,或多或少會(huì)從書(shū)中汲取一些知識(shí)。
Python程序員。Python能做什么?它也能編寫(xiě)游戲服務(wù)器嗎?答案是肯定的。只要你做得好,搭配得當(dāng),使用Python編寫(xiě)游戲后臺(tái)不會(huì)比其他語(yǔ)言差(比如Java),有時(shí)候甚至更方便。如果你是Python程序員,又希望涉獵游戲后臺(tái)的開(kāi)發(fā),本書(shū)一定會(huì)對(duì)你有極大幫助。
如何閱讀本書(shū)本書(shū)內(nèi)容從邏輯上共分為三大部分。
第一部分的內(nèi)容包括第1~3章,主要介紹了Python中網(wǎng)絡(luò)的基礎(chǔ)模塊、通信加密,以及一部分服務(wù)器實(shí)作。其中:
第1章的內(nèi)容包含Socket套接字的介紹和使用、基礎(chǔ)send和recv方法、阻塞和非阻塞方式、urllib和urllib2等Python基礎(chǔ)庫(kù)的使用。
第2章介紹了通信加密,其中包括基礎(chǔ)的異或加密、對(duì)稱(chēng)和非對(duì)稱(chēng)加密,以及OpenSSL、SSL/TLS通信方式等的詳細(xì)介紹。
第3章開(kāi)始使用Python代碼編寫(xiě)實(shí)際可運(yùn)行的服務(wù)器代碼,并介紹了Websocket協(xié)議、GIL的優(yōu)劣,以及Python線程池的使用。
第二部分的內(nèi)容包括第
蔡能(DarkSpy)
資深服務(wù)器底層技術(shù)專(zhuān)家和游戲服務(wù)器開(kāi)發(fā)專(zhuān)家,有超過(guò)20年的編碼和團(tuán)隊(duì)管理經(jīng)驗(yàn),是網(wǎng)易的早期員工之一。
在游戲開(kāi)發(fā)領(lǐng)域有非常深厚的積累,帶領(lǐng)團(tuán)隊(duì)開(kāi)發(fā)了各種類(lèi)型(PC游戲、手游、頁(yè)游、2D游戲、3D游戲、VR/AR游戲等)的游戲和應(yīng)用服務(wù)器,對(duì)服務(wù)器的架構(gòu)、編寫(xiě)、優(yōu)化和并發(fā)策略有深刻的認(rèn)識(shí)和獨(dú)到的見(jiàn)解;在C/C 、Python、PHP等技術(shù)領(lǐng)域的經(jīng)驗(yàn)十分豐富。
1996~2009年期間,曾編寫(xiě)過(guò)極富盛名的EasyCode和EasyCode Pro,以及其他被收錄到各大雜志典藏光碟的軟件,EasyCode 在參加《程序員》網(wǎng)站舉辦的"中國(guó)共享軟件評(píng)比"活動(dòng)時(shí)得票數(shù)在同類(lèi)軟件中名列第一。是《程序員》雜志2007~2008年C/C 領(lǐng)域的點(diǎn)評(píng)專(zhuān)家,擅長(zhǎng)軟件架構(gòu)和底層技術(shù)。2013年7月,接受《今日早報(bào)》關(guān)于游戲行業(yè)的采訪。
目 錄?Contents
前 言
第一部分 網(wǎng)絡(luò)和服務(wù)器
第1章 Python網(wǎng)絡(luò)編程模塊 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 服務(wù)器端其他Socket方法 7
1.2.1 bind和listen 7
1.2.2 setsockopt 8
1.3 客戶(hù)端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 事件驅(qū)動(dòng)框架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 異或位運(yùn)算加密 27
2.1.2 其他對(duì)稱(chēng)加密 29
2.1.3 非對(duì)稱(chēng)加密 30
2.2 OpenSSL 33
2.2.1 生成證書(shū) 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 多國(guó)語(yǔ)言 53
第3章 服務(wù)器實(shí)作 55
3.1 構(gòu)建Python Websocket服務(wù)器 55
3.1.1 Websocket的應(yīng)用場(chǎng)景 57
3.1.2 實(shí)作Websocket握手協(xié)議 59
3.1.3 MAGIC_STRING在Websocket中的作用 60
3.1.4 Websocket 啟動(dòng) 62
3.1.5 Websocket消息拆分和讀取 63
3.2 多線程服務(wù)器 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 默認(rèn)線程池和進(jìn)程池 75
3.3.2 協(xié)程 76
3.3.3 第三方庫(kù) 78
3.3.4 gevent的數(shù)據(jù)結(jié)構(gòu) 85
第二部分 存儲(chǔ)與數(shù)據(jù)庫(kù)
第4章 基礎(chǔ)內(nèi)容存儲(chǔ) 94
4.1 數(shù)據(jù)庫(kù)存儲(chǔ)的種類(lèi) 95
4.2 SQL與NoSQL 96
4.2.1 SQL 96
4.2.2 SQL語(yǔ)句語(yǔ)法 97
4.2.3 NoSQL 101
4.2.4 NoSQL語(yǔ)句語(yǔ)法 106
4.3 內(nèi)存與IO讀寫(xiě)速度 108
4.4 同步內(nèi)存數(shù)據(jù) 109
4.4.1 Redis數(shù)據(jù)庫(kù)的持久性 111
4.4.2 Redis主從數(shù)據(jù)庫(kù)復(fù)制 112
4.5 數(shù)據(jù)備份和恢復(fù) 113
4.5.1 備份的類(lèi)型 114
4.5.2 使用Python編寫(xiě)備份代碼 115
4.6 不可或缺的SQLite 117
第5章 存儲(chǔ)方案 121
5.1 高并發(fā)服務(wù)器的存儲(chǔ)方案 121
5.1.1 網(wǎng)站高并發(fā)服務(wù)器的策略 122
5.1.2 數(shù)據(jù)庫(kù)的鎖 125
5.2 高速緩存 127
5.2.1 Memcached 127
5.2.2 大文件緩存 129
5.2.3 分布式和集群 130
5.3 二進(jìn)制存儲(chǔ)方案 132
5.3.1 磁盤(pán)IO和緩存 133
5.3.2 圖片和影音文件 134
5.4 大規(guī)模計(jì)算 135
5.4.1 圖片服務(wù)器的架構(gòu) 136
5.4.2 讀取和寫(xiě)入文本 137
5.4.3 文本搜索方案 138
5.5 區(qū)塊鏈技術(shù) 139
第三部分 服務(wù)器架構(gòu)及其方案
第6章 游戲服務(wù)器初探 144
6.1 服務(wù)器消息和輪詢(xún) 144
6.1.1 卡牌游戲和弱連接 145
6.1.2 消息的輪詢(xún) 147
6.2 游戲服務(wù)器架構(gòu)演變 149
6.2.1 上古時(shí)代的游戲服務(wù)器 149
6.2.2 近代的網(wǎng)絡(luò)游戲服務(wù)器 153
6.2.3 近現(xiàn)代經(jīng)典游戲服務(wù)器模型 155
6.3 地圖的無(wú)縫連接 157
6.3.1 無(wú)縫連接的分析 158
6.3.2 無(wú)縫地圖更深層次的問(wèn)題 160
第7章 游戲服務(wù)器的交互 165
7.1 無(wú)狀態(tài)和有狀態(tài)的服務(wù)器設(shè)計(jì)方案 165
7.1.1 無(wú)狀態(tài)的服務(wù)器設(shè)計(jì)方案 166
7.1.2 有狀態(tài)的服務(wù)器設(shè)計(jì)方案 167
7.2 輪詢(xún) 169
7.3 集群方案 171
7.3.1 集群的幾種方式 171
7.3.2 集群的方案 172
7.3.3 數(shù)據(jù)庫(kù)方案 173
7.3.4 Web服務(wù)和數(shù)據(jù)庫(kù) 174
7.3.5 其他方案 176
7.4 定時(shí)任務(wù) 178
第8章 游戲大廳 181
8.1 大廳登錄流程 181
8.1.1 登錄和選擇游戲區(qū) 182
8.1.2 注冊(cè)和登錄 183
8.2 中間件 185
8.2.1 中間件的相關(guān)概念 186
8.2.2 ElasticSearch 191
8.2.3 在Python中使用ES 193
8.3 聊天服務(wù) 195
8.3.1 聊天服務(wù)器的搭建 195
8.3.2 聊天內(nèi)容的獲取和分發(fā) 196
8.4 大廳與游戲的對(duì)接 198
8.4.1 創(chuàng)建房間 198
8.4.2 與游戲的對(duì)接 199
第9章 實(shí)時(shí)交互服務(wù)器 202
9.1 長(zhǎng)連接和強(qiáng)交互 202
9.1.1 TCP連接 203
9.1.2 多線程 205
9.1.3 異步控制 206
9.1.4 加入隊(duì)列 207
9.2 使用UDP的方案 210
9.2.1 什么是UDP協(xié)議 210
9.2.2 TCP協(xié)議和UDP協(xié)議的區(qū)別 212
9.2.3 使用Python編寫(xiě)UDP服務(wù) 214
9.2.4 加入多線程 216
9.3 協(xié)議包的設(shè)計(jì)和實(shí)現(xiàn) 218
9.3.1 協(xié)議包頭和包身 219
9.3.2 協(xié)議包完整性 221
9.3.3 協(xié)議的加密和壓縮 222
9.3.4 協(xié)議包混淆 223
9.4 斷線重連 224
第10章 天梯和經(jīng)濟(jì)系統(tǒng) 227
10.1 什么是天梯 227
10.1.1 天梯的框架 229
10.1.2 數(shù)據(jù)載入 230
10.2 天梯層級(jí) 231
10.3 經(jīng)濟(jì)系統(tǒng) 234
10.3.1 經(jīng)濟(jì)系