- 百萬在線:大型游戲服務(wù)端開發(fā)
- 羅培羽
- 3045字
- 2021-09-17 17:04:50
前言
這本書講什么
本書是基于C++與Lua語言開發(fā)游戲服務(wù)端的入門圖書,內(nèi)容涵蓋Skynet引擎、C++底層開發(fā)、服務(wù)端架構(gòu)設(shè)計(jì)等多個(gè)方面,全面展現(xiàn)網(wǎng)絡(luò)游戲核心技術(shù)。
第一部分“學(xué)以致用”揭示了Skynet引擎的使用方法及注意事項(xiàng),以《球球大作戰(zhàn)》的案例貫穿這部分內(nèi)容,全面又詳盡地剖析服務(wù)端結(jié)構(gòu)設(shè)計(jì)、通信協(xié)議格式、數(shù)據(jù)表結(jié)構(gòu)設(shè)計(jì)、斷線重連方案等眾多核心技術(shù)。第二部分“入木三分”揭示了在多核時(shí)代采用現(xiàn)代C++編寫多線程TCP網(wǎng)絡(luò)服務(wù)器的高效做法,以C++重寫Skynet的案例貫穿這部分內(nèi)容,使用大量圖表,生動(dòng)翔實(shí)地描述Linux環(huán)境下的編程技術(shù)。第三部分“各個(gè)擊破”列舉了同步算法、熱更新、防外掛等實(shí)際工程難題,并對(duì)其逐一擊破,非常具有實(shí)用價(jià)值。
盡管本書以Skynet為例,但目的是探求服務(wù)端開發(fā)的一般性方法,因此它同樣適用于使用C++自研引擎的項(xiàng)目組,甚至是選用Erlang、Golang、Java等語言的開發(fā)者。本書既可以作為大學(xué)計(jì)算機(jī)相關(guān)專業(yè)的指導(dǎo)教程,也可以作為游戲公司的培訓(xùn)材料,亦是獨(dú)立游戲開發(fā)者的參考指南。
為什么寫這本書
進(jìn)入手游時(shí)代,服務(wù)端技術(shù)也在向前演進(jìn)。現(xiàn)代游戲服務(wù)端既要承載數(shù)以萬計(jì)的在線玩家,又要適應(yīng)快速變化的市場(chǎng)需求,因此,如何設(shè)計(jì)合適的架構(gòu)就成了重中之重。服務(wù)端技術(shù)并不簡(jiǎn)單,作為服務(wù)端新人,全面掌握服務(wù)端技術(shù)可能需要數(shù)年時(shí)間;作為游戲公司,培養(yǎng)員工的成本也不低。
新人或許有這樣的經(jīng)歷,在請(qǐng)教資深技術(shù)人應(yīng)該看什么資料學(xué)習(xí)C++服務(wù)端知識(shí)時(shí),可能得到的答案是先把《TCP/IP詳解》《UNIX環(huán)境高級(jí)編程》《數(shù)據(jù)庫系統(tǒng)》這些大部頭啃一遍,或者是把Redis、Skynet的源碼過一遍,再看點(diǎn)Linux源碼就都會(huì)了。雖說啃大部頭、看源碼是服務(wù)端從業(yè)者的必經(jīng)之路,但人的時(shí)間是有限的,因此,在入門階段,在有限的時(shí)間里學(xué)到最實(shí)用的知識(shí)很關(guān)鍵。
找到契合實(shí)際項(xiàng)目開發(fā)需要的學(xué)習(xí)資料并不容易。市面上的服務(wù)端資料,有些著重講網(wǎng)絡(luò)編程、多線程處理等操作系統(tǒng)知識(shí),這些知識(shí)雖然很重要,但不太適合“快速入門并馬上有產(chǎn)出”的開發(fā)節(jié)奏;有些又太過簡(jiǎn)單淺顯,不能適應(yīng)商業(yè)游戲的品質(zhì)要求。游戲服務(wù)端的知識(shí)體系既包含系統(tǒng)底層知識(shí),也包含具體游戲業(yè)務(wù)的設(shè)計(jì),內(nèi)容很多,學(xué)習(xí)不易。
基于以上所述,我決定將自己多年的開發(fā)經(jīng)驗(yàn)全盤托出,編寫一本既實(shí)用又深入淺出的游戲服務(wù)端教程,為未來游戲行業(yè)的繁榮發(fā)展添磚加瓦。
服務(wù)端成長(zhǎng)路線
游戲公司培養(yǎng)新人,強(qiáng)調(diào)“邊學(xué)邊用”“有產(chǎn)出再深入”的技術(shù)成長(zhǎng)路線,一般是讓新人從開發(fā)簡(jiǎn)單的業(yè)務(wù)功能開始,再逐步深入底層,最后獨(dú)當(dāng)一面。
第一年:能做好功能
這個(gè)階段要求能按時(shí)、按質(zhì)、按量做好業(yè)務(wù)功能。剛進(jìn)游戲公司參與項(xiàng)目開發(fā),你需要從較簡(jiǎn)單的活動(dòng)功能寫起,逐漸過渡到能編寫較為復(fù)雜的跨服功能和戰(zhàn)斗功能等。
第二年:能用好框架
公司開啟一個(gè)新項(xiàng)目,一般不會(huì)從零做起,而是會(huì)拿一套已有代碼參考,根據(jù)需求做修改。這個(gè)階段就要求你能夠分析別人為什么要這樣設(shè)計(jì),并能修改底層功能,改善性能問題。
第三年:能重建系統(tǒng)
當(dāng)舊框架已經(jīng)落后于時(shí)代,或者歷史遺留問題太多,又或者想開展新業(yè)務(wù)、開發(fā)不同類型的游戲時(shí),你就要從零開始設(shè)計(jì)了。這個(gè)階段要求你有重新搭建整套服務(wù)端系統(tǒng)的能力。
本書的內(nèi)容選擇和章節(jié)設(shè)計(jì),正是基于這樣的成長(zhǎng)路線規(guī)劃的。先用現(xiàn)成的Skynet引擎把游戲做出來,再逐步深入,重構(gòu)整套系統(tǒng)。經(jīng)過這幾個(gè)階段的打磨,相信不久的將來,你就能夠獨(dú)當(dāng)一面。
讀者對(duì)象
這里根據(jù)用戶需求劃分出一些可能使用本書的用戶。
·職場(chǎng)新人:本書很適合剛?cè)胄械姆?wù)端工程師,書中所介紹的知識(shí)和問題,是每個(gè)游戲從業(yè)人員都會(huì)遇到或必須解決的。本書可作為提升技術(shù)水平的學(xué)習(xí)資料,也適合用作游戲公司服務(wù)端新人的培訓(xùn)材料,書中既涵蓋了該崗位的必備知識(shí),也包含了《球球大作戰(zhàn)》、Sunnet(C++仿寫Skynet底層)等實(shí)踐項(xiàng)目。我們希望職場(chǎng)新人讀完本書之后,不僅能夠更快更好地完成手頭工作,還能夠?yàn)橄乱浑A段的職業(yè)發(fā)展做好積累。
·開發(fā)類崗位的求職者:本書也適合游戲公司開發(fā)崗位的求職者。書中對(duì)服務(wù)端崗位所需知識(shí)、商業(yè)游戲常遇到的問題等進(jìn)行了講解,覆蓋了常見的面試內(nèi)容。我們希望本書能夠幫助讀者獲得C++服務(wù)端開發(fā)工程師的崗位。
·高校學(xué)生:本書可作為高校教科書。書中內(nèi)容是按照游戲公司的需求設(shè)計(jì)的,內(nèi)容循序漸進(jìn),且包含諸多示例。我們希望本書可以幫助學(xué)生掌握實(shí)用的知識(shí),幫助他們構(gòu)建完整的知識(shí)體系,也為未來的進(jìn)一步進(jìn)修或職業(yè)發(fā)展提供助力。
·游戲開發(fā)愛好者:在本書中,“學(xué)以致用”的理念貫穿全書,對(duì)于想要自己制作一款網(wǎng)絡(luò)游戲的業(yè)余開發(fā)者來說,本書很適合作為自學(xué)的參考書。我們希望本書可以幫助讀者“先把游戲做出來”,讓讀者能夠先快速使用現(xiàn)成的Skynet框架,再逐步深入底層,為夢(mèng)想助力。
如何閱讀本書
如果你是一位服務(wù)端新人,強(qiáng)烈建議你按順序閱讀本書,并復(fù)現(xiàn)一遍書中的示例。在本書的選材和結(jié)構(gòu)編排上,我花了兩年時(shí)間思考,也做過很多調(diào)研工作,相信它是相對(duì)合理的。圖1展示了本書的知識(shí)線,可以看到,里面包含“業(yè)務(wù)層”“框架層”“底層”這三個(gè)層次的內(nèi)容,較為全面。本書把大部分重心放在了“學(xué)以致用”部分,配合諸多圖示、示例,讓讀者不會(huì)覺得枯燥。
要用好本書不需要高超的編程技巧,但是確實(shí)需要對(duì)其中某種語言的語法有基本的了解;又因?yàn)楸緯纠歼\(yùn)行在Linux環(huán)境下,因此也需要對(duì)Linux的操作有基本的了解。
如果你并不打算使用Skynet引擎,而是希望透過本書了解C++/Lua服務(wù)端的通用知識(shí),那么可以直接跳過第2章,因?yàn)檫@一章著重介紹Skynet的使用方法;你也可以跳過第3章和第4章中的代碼示例,因?yàn)樗鼈兌际腔赟kynet做演示,但這兩章會(huì)說明服務(wù)端拓?fù)浣Y(jié)構(gòu)、登錄流程以及一些實(shí)用技巧,這些內(nèi)容不建議跳過。

圖1 本書知識(shí)線
如果你使用的是Java、Erlang、Golang等語言,也不打算了解C++底層,更希望透過本書了解一些業(yè)務(wù)層的通用知識(shí),那么建議你重點(diǎn)關(guān)注第1、3、4、8、9、10章。
本書所有示例的源碼和素材均可以在Github或網(wǎng)盤下載。我也會(huì)在Github上發(fā)表勘誤和補(bǔ)充內(nèi)容等,歡迎關(guān)注。考慮到網(wǎng)盤不穩(wěn)定,因此我無法保證多年后網(wǎng)盤地址還有效。若讀者發(fā)現(xiàn)網(wǎng)盤地址失效,可以給我發(fā)郵件,我將會(huì)把最新的下載地址發(fā)給你。
Github:https://github.com/luopeiyu/million_game_server
百度網(wǎng)盤:https://pan.baidu.com/s/1icbEXxq2HeIXfUeuqiKyvQ(提取碼為wa3d)
作者郵箱:aglab@foxmail.com
勘誤和支持
由于作者水平有限,編寫的時(shí)間也很倉促,書中難免會(huì)出現(xiàn)一些錯(cuò)誤或者表述不準(zhǔn)確的地方,懇請(qǐng)讀者批評(píng)指正。如果讀者發(fā)現(xiàn)書中的錯(cuò)誤,或者有更多寶貴意見,歡迎發(fā)送郵件至郵箱aglab@foxmail.com,我很期待聽到你們的真摯反饋。
致謝
早在2017年,我便開始規(guī)劃本書的目錄結(jié)構(gòu),并在2018年開始試寫一些章節(jié)。經(jīng)過幾年積累,本書終于逐漸成型。若沒有身邊眾多親朋好友的支持,本書的出版過程不可能一帆風(fēng)順。
感謝機(jī)械工業(yè)出版社華章分社的楊繡國(guó)編輯,在她的幫助下,2019年年末,本書的出版計(jì)劃正式提上日程。
感謝四三九九公司的同事們。感謝我的直接上司徐康成就了技術(shù)研發(fā)中心的良好氛圍。感謝鄺劍洪、黃虹學(xué)、丘盛、黃贊在“4399未來主程俱樂部”幫本書做宣傳。
幾乎每個(gè)工作日的中午,我和鄺松恩、張浩楠、張永明等同事都會(huì)找個(gè)地方買杯咖啡暢談技術(shù)方案,一些靈感也是從這些交流中得來的,謝謝他們。感謝以下同事給我諸多建議:陸俊壕、王雅倫、李永航、孫杰、梁振、徐銳忠、葛劍航、梁耀堂、黃劍基、陳鴻才、樊潮波、李杰文。
在本書編寫期間,我對(duì)書籍選材、章節(jié)安排做過一些調(diào)研,并詢問了諸多好友,他們給了我許多建設(shè)性意見。這些好友包括:沙梓社、胡耀、陸澤西(Jesse Lu)、林煜、宮文達(dá)、盧陽飛、葉健勇、張曦、徐錦鴻、詹俊雄、李石清、方濤、胡文鼎、張貝、陳欣妮、李駿(Jarjin Lee)。
感謝我的父母,他們的努力,讓我能義無反顧地前行。
每一款游戲都是夢(mèng)想與智慧的結(jié)晶!
羅培羽
2021年7月于廣州
- SPSS數(shù)據(jù)挖掘與案例分析應(yīng)用實(shí)踐
- LabVIEW 2018 虛擬儀器程序設(shè)計(jì)
- Hands-On Machine Learning with scikit:learn and Scientific Python Toolkits
- The Android Game Developer's Handbook
- 深入淺出Windows API程序設(shè)計(jì):編程基礎(chǔ)篇
- 軟件架構(gòu):Python語言實(shí)現(xiàn)
- 自然語言處理Python進(jìn)階
- Procedural Content Generation for C++ Game Development
- 零基礎(chǔ)學(xué)C語言(第4版)
- Backbone.js Testing
- HTML+CSS+JavaScript網(wǎng)頁制作:從入門到精通(第4版)
- Python Web自動(dòng)化測(cè)試設(shè)計(jì)與實(shí)現(xiàn)
- Visual Basic 程序設(shè)計(jì)實(shí)踐教程
- 3D Printing Designs:The Sun Puzzle
- 現(xiàn)代C++語言核心特性解析