最近一直在作開源服務器的優化以及新功能的添加,不止一次有人在羣裏問我,你的這個PSS作遊戲服務器怎麼樣?
確實,我也考慮過這個問題。不管本身的水平如何,好歹也在網絡遊戲服務器開發上走過8個年頭了,從當年臺灣第一的遊戲橘子,到後來的自主創新的硅谷,到後來的搜狐,後來從搜狐出來又進入創業公司。
一步步的走來,很想寫的什麼。
最痛徹心扉的失敗的遊戲經歷過,最激情的成功的遊戲,海量玩家涌入的通宵也瘋狂過。
看到不少作技術的朋友,對遊戲仍是趨之如騖,尤爲是初學者,我想說,在大家開始大家的遊戲服務器設計之旅以前,好好的讓本身平靜一下。
若是你不是爲了爭分奪秒或者急於成就本身的遊戲,但願你能夠靜下心來讀一下如下的文字。
在我這裏,我會慢慢結合個人PSS來解釋如何作一個,讓你本身驕傲的遊戲服務器。
前提是,你須要先靜下心來。把如下的文字,轉化爲本身的故事。
這裏,我並不會列舉太多的代碼。
由於我認爲最不重要的,就是代碼。
我會講一系列的故事,但願這些故事,讓你不斷的從中吸取到屬於你的東西。
誠然,當年的我,誤打誤撞的進入了網絡遊戲行業,說來也很奇怪,2002年的我毅然決然(或者說傻里傻氣)從個人第一家任職的公司辭職,當時已經作到了公司的技術一把手。
可是不知道爲何,內心一直以爲這不是個人歸宿,也沒想這麼多,就出來了,經歷了三個月的煎熬,才知道本身的自大和無知。覺得本身知識基類已經能夠了,結果發如今別的項目上什麼都無用。
因而明白了一個道理,任什麼時候候,只要你勇於從零開始,永遠會有所得到。
第一次參加遊戲服務器的時候,並不是我想的那麼簡單,雖然我已經作好了艱苦奮鬥的準備,可是實際的考驗仍是大大的超出了我想象。
我和當時不少初學者同樣,在網上大量搜索,大量買相關書籍,也常常問一些如今看來無所謂的問題。
後來慢慢的開發中發現,其實遊戲服務器設計有幾大誤區。
你最不該該關心什麼?
(1)如今網上不少的文章,尤爲是關於遊戲服務器的,都把網絡IO講的神乎其神,彷佛socket效率就是服務器的一切,若是你讀到這些文章,大能夠建議你不用讀下去了。
由於,網絡IO是最成熟的,也就是說,代碼換來換去就那麼幾行。若是做者用超過50%的筆墨再講這些,只能說明做者自己對遊戲服務器設計開發能力有限或者根本不想告訴你遊戲服務器的設計核心在哪裏。
實在是不必濃妝豔抹,不管IOCP,epoll,仍是kqueue。這不是你關心的事情,只要知道到時候用到的時候到哪裏找例子就好了。
(2)數據庫,這部分也不須要太多的介紹,由於數據庫自己只是一個存儲介質,用文件,用NoSQL,用DBMS,甚至用內存,這些都只是數據存於長久介質的一種方法。
數據庫技術同樣成熟,樣例代碼滿天飛,沒必要要爲此多花費精力。
(3)腳本語言,好比如今不少文章吹噓Lua以及phthon等一些腳本在遊戲服務開發中的優點,不能否認,這在某些狀況下是很是優雅的。可是並非沒有這些,就作不了遊戲了。
用C++或者Java直接寫的代碼同樣有優秀的遊戲。
(4)網上相傳的各類開源的遊戲服務器,以及那些所謂「偷竊」出來的知名遊戲服務器源代碼。
這些代碼實際徹底無心義,除了多佔據你的機器硬盤,沒什麼別的做用。由於對於初學者,在沒有文檔的狀況下,去讀動輒及萬行的代碼,實在是一件不靠譜的事情。
你應該關心什麼?
(1)你的遊戲服務器要達到什麼功能?
每一個策劃給你的需求都不一樣,你要知道,你的遊戲特色是什麼?理解在這個特色上,咱們的賣點是什麼?那麼,爲了這個賣點,咱們怎麼保護核心玩家在必定程度的核心體驗。
(2)服務器的初步佈局如何?
你能夠採用什麼樣的遊戲服務器佈局,單機,一組?仍是集羣?
在這個佈局下,劃分每一個功能在每臺服務器的應該完成的任務。這裏先不須要去想代碼。
你可以用你的鉛筆和紙張畫出主要數據流動方向以及服務器主要功能分佈便可。
(3)你手裏有什麼資源能夠支持你的架構?
成本很是重要,要知道商業活動,都是要最小化成本的,不可能爲你的一個遊戲搞個幾十臺服務器才支持2000人。
因此瞭解本身有什麼很是重要。
(4)你的同伴有什麼擅長的技能和技術方向?
這一點相當重要,你的下屬或者同伴,若是你讓他們作本身不擅長的事情,確定會增長成本而得不償失。
(5)你的時間預估如何計算?
若是你預計某一項功能大概須要5天/人,那麼保守的估計你最好乘以一個1.5的係數,還有懂得,什麼時間作什麼事很是重要。給本身設置階段里程碑。
這裏只考慮功能主模塊的時間。
若是你對某一項技術不熟而須要技術預研的話,這段時間不計算再開發週期內。
設計一個好的遊戲服務器,須要的不止是技術,最重要的是一個好的規劃。有好的規劃,就是成功的通常。
代碼只是實現體,實際重要程度並不是主要。
若是在你的開始設計上出現了問題,那麼,後期遊戲服務器就會花費巨大的成本修改前期的錯誤。
好,下一講,我會講如何利用PSS去設計你的遊戲服務器。
有一個概念必須先入,不要陷入代碼的海洋,你應該能抽出身來,若是你不能用簡單的語句描述清楚你的須要,就不要動手去實現你的代碼。html