又是一個美好的週末啊,如今一到週末,早上就起得晚,下午困了又會睡一兩個小時,上班的時候,早上起來喝一杯咖啡,而後就能高效的工做一成天,然而到了週末人就懶散了,哈哈。前端
最近剛跳槽,到新公司已經幹了有兩週時間了,這兩週時間是過得比較充實的,由於這家新公司是個小公司,之前以單機開發爲主,服務器方面我一我的,作兩個遊戲的服務器開發工做,固然,一個很簡單,另外一個就相對複雜點,簡單的那個是個弱聯網遊戲,服務器只須要作好數據存檔和登陸支付驗證就行了,而另外一個,則是相對複雜的slg遊戲,我感受這是又一款cok,而公司目前並不打算再招服務器了,因此估計這個項目我會一我的幹到明年吧,等第一款上線賺錢了,可能會再招服務器。老實說,面試的時候,我就以爲這份工做對我而言是一個挑戰,而當我清楚的瞭解了公司情況以後,我依然決定接受這個挑戰。java
說說我以前的經歷吧,大四的時候,學校安排來北京培訓java(培訓沒什麼丟臉的,出來找工做我也用的真學歷真背景,不像某峯互聯),以後我去了培訓機構推薦的公司實習,那個時候,工資2k,然而工做也乾得很開心,跟着前輩學到了很多東西,當時是作微信公衆號開發的,我跟着前輩作微信後臺開發,當時使用SpringMVC+MyBatis框架,剛接觸的時候,我本身學了挺久才弄明白,後來弄明白以後想一想,其實挺簡單,對於邏輯開發的程序員來講,你只須要弄懂工做流程就行了,頁面怎麼跳轉,跳轉怎麼傳值,數據怎麼處理,這些足夠了,固然我是個不知足的人,我會去弄明白,爲何用這個框架、爲何不用別的、用這個有什麼好處、若是讓我本身來作這個後臺、我會怎麼搭建?帶着這些問題,我會試着本身搭建一下後臺框架(雖然前期大部分是複製粘貼)。除了框架部分,微信高級接口也是我研究的重點,我會去官方文檔看看微信是怎麼接入的,而後研究研究前輩的代碼是怎麼寫的,所謂的幹一行愛一行大概就是這樣吧,當時我以爲,微信開發,是頗有前途的,而咱們公司用的框架,也是最早進的(後來看來,確實這個框架組合是當前最流行的框架,而當時,微信公衆號也確實是當時互聯網行業的一個風口,微信後來把h5帶起來了,致使如今一個好的h5前端都是供不該求的,薪資很高)。node
說了這麼多,爲何後來又轉行作遊戲了呢?實際上是這樣的,當時在第一家公司,個人上級打算跳槽走了,帶走整個下面的技術,而不帶實習生,有那麼一兩個月,實習生就一直閒着沒事作,對於我來講,這樣過着就太無聊了,我喜歡挑戰,因而我投簡歷,從新找了份實習工做,在一個遊戲公司作java服務器開發,公司挺大的,幾年前憑藉一款slg頁遊稱霸遊戲行業(什麼遊戲我就不說了,說了就知道什麼公司了),後來遊戲行業往手遊發展,這款slg也出了手遊版,這一款遊戲,幾乎支撐了整個公司,再加上後來出的幾款手遊,公司發展挺好的,我所實習的部門作的是一款mmorpg手遊,從實習作到了轉正,作了近一年了,然而這款rpg手遊的數據卻不是太好,第一次封測第二天留存23,第二次26(如今這家公司的遊戲能達到80屢次日留存),七日就更不用說了,而我也能感受到,做爲一款mmo遊戲,玩家之間的交互實在太少,從頭玩下來,我以爲這是一款單機,失去了mmo的本質,在項目組準備進行第三次封測的時候,我選擇了離開,緣由不少,不只僅由於遊戲數據很差,也有一些我的緣由吧,不過說實話,是這家公司帶我走進了遊戲行業,我很感謝,我以爲遊戲行業是一個很是有前景的行業,甚至比以前我認爲最好的微信開發還要好,遊戲行業很是暴利,在這家公司工做就能感覺到,策劃文檔中,充滿了挖坑預留的計費點,這一塊能夠正常玩兒,但你若是充錢,你就比別人牛逼。網絡遊戲,最重要的,就是控制好平民玩家跟普通玩家的佔比以及遊戲平衡(當意識到公司的遊戲如此處心積慮想要坑錢的時候,我忽然明白爲何公司的遊戲大多被騰訊代理了,爲何騰訊控股,原來如此,沒錢玩兒你**,哈哈)。由此也能夠看出,遊戲的商業化,已經把遊戲公司帶入了一個固定的模式——無條件坑錢,我以爲已經失去了遊戲的本質,我看過一本書,叫《遊戲人生》(當時在cocos2014年開發者大會上買的。以爲挺值的),書已經送人了,但內容我看了一大半,從遊戲的產生,到玩家的心理,到爲何須要遊戲,這本書都詮釋的熱別好(我以爲遊戲策劃都應該看看這本書,作良心遊戲,拒絕一味坑錢)。啊,忽然發現這一段說的有點偏了,說到底,我也只是作遊戲服務器開發的,我也改變不了遊戲行業,我只要作好我作的。其實大的遊戲公司,就應該走這種商業化路線,憑藉幾款長生命週期的遊戲,支撐公司流水。mysql
從轉行作遊戲以後,我卻是以爲,遊戲開發比web開發有趣多了,固然技術上也比web難多了,以前發過一篇討論,web開發何和遊戲開發的區別,http://gad.qq.com/content/wendetail/7082370,我把個人答案再粘貼一遍(其實是別人要求我上他的號去回答的,因而我就本身回答了我本身的問題):程序員
1.從第三方支持來講,web後臺有不少成熟的第三方框架,開發者不須要關心底層控制器跳轉的實現,只須要一個或幾個配置文件,就能完成核心控制器的部分,而開發者只須要關注web自身的業務邏輯,將邏輯與框架融合便可,使用框架一方面簡化控制層代碼,一方面很好的實現了業務邏輯的分層。而遊戲後臺開發中,由於各類遊戲的需求差別性很大,從網絡層,到業務邏輯層,各方面都必須根據本身遊戲需求搭建適合本身的框架,所以很難有一些通用的東西能提煉出來一款成熟的框架,遊戲後臺開發基本上須要本身搭建適合本身的框架。web
2.從業務邏輯層面來講,web後臺基本上邏輯都是大同小異的,或許這一套系統,稍微改改,另外一套系統就能用,而遊戲就不一樣了,每一個遊戲都有本身的特點,根據策劃的不一樣需求而實現不一樣的邏輯,不過也會有一些通用的模塊,但總體上差別性仍是很大的。面試
3.從數據持久化來講,web的數據基本上是很規整的,表與表之間關係很明確,而且之後也不會有太大的變化,而遊戲中的數據多種多樣,隨着開服以後,數據的變化也是多種多樣,甚至傳統的關係型數據庫根本沒法知足遊戲數據持久化的需求,遊戲中有不少狀態和數據是須要服務器來保存的,我我的認爲,在遊戲開發中,nosql比關係型數據庫更實用。redis
4.從通訊層來講,web中的用戶都是一個個獨立的個體,而遊戲中是多人在線的一個遊戲世界,在這個遊戲世界中,玩家與玩家之間須要進行交互,這就須要服務器實時的向全部在線玩家進行消息廣播,這一點很損耗服務器性能的,在這方面,遊戲後臺要比web作更多的處理,遊戲服務器是一個IO密集的服務器類型。sql
以上即是我當時的答案,或許個人看法尚淺,畢竟我作遊戲不到一年,不過對於後臺開發這塊,我仍是有一點話語權的,從實習遊戲開發開始,我便經歷了一個轉換的過程,幾乎又是一個從零開始的學習過程,從mina框架到protobuffer,這些東西,我相信web開發不多接觸(mina做爲網絡通訊框架,web中幾乎只有http通訊,protobuffer做爲通訊協議,web最多用json,其實兩者形式上差異不大,但數據大小千差萬別)。而遊戲的邏輯,也是比web複雜得多,不得不說,web後臺成熟的第三方框架是作的真的很好。數據庫
經歷了上家公司的洗禮,我想我對遊戲後臺開發有了足夠的瞭解,因而我找到了我如今這家公司,這家公司目前只有我一個服務器後臺,作兩款遊戲,一款是塔防類,準備由單機改爲弱聯網,服務器存檔,並作登陸支付驗證,另外一款,是比較龐大的slg手遊,是準備帶領公司走上巔峯的項目,說一款slg帶領一個公司走上巔峯一點兒不爲過,我上家公司就是這樣的,憑藉一款《xxxx》(哈哈,名字不透露),走上人生巔峯。我之因此接受這份工做,是由於我接受挑戰,從底層寫起,從架構寫起,這是做爲一年工做經驗的我想都不敢想的,不過這是一個挑戰自我,證實自個人機會,我願意接受這個挑戰,人生總會有不少爬坑的時候,但爬過了坑,就真的是人生巔峯了。我接受這個工做的另外一個緣由,就是公司發展確實不錯,之前作的單機,都是很火的(雖然我認爲我本身一我的也能作,我也是學過cocos的),而如今公司也準確的把握了遊戲行業的風口——slg,coc和cok的成功案例就能證實一切,mmorpg也不必定能作起來了,moba卻是有可能,但你要跟lol作不到80%的類似,我估計沒人願意在手機玩兒moba,slg或許是性價比最高的了。這麼有挑戰的工做,還要從架構寫起,這樣的挑戰,我喜歡!
說說互聯網業的書吧,我認爲這個行業的書,分爲兩種,理論型的和技術型的,所謂理論型,就是長篇大論互聯網發展,行業模式等,而技術型,就是相似技術的工具書,是從技能入手的書,這兩種書,我家裏都有,但我發現買了以後,我不多有時間看,下班沒多少時間,北京上班,大多數時間都浪費在地鐵上了,上班時間,看看理論型的吧,以爲囉嗦,浪費時間(後來我發現,作這行,除了會技術,你仍是須要去看看牛人眼中的互聯網的,你須要透過前輩的眼光看世界,不要作IT民工,要作互聯網從業者),看看技術型的吧,讓別人看見了感受你太low,因此我大多數時間仍是能在網上down到pdf就在電腦看,down不到百度谷歌我要研究的技術,畢竟從事這行,仍是用電腦學技術好點,主要是電腦看久了眼睛會疲憊,偶爾看看紙質的書也不錯的。而之前面試的時候,面試官常常問,除了大學課本,你還看什麼書啊?(若是是大家,恰巧又沒看什麼書,大家怎麼說?),我通常會說,我會自學其餘技術,如cocos2dx,而後買一些技術指南之類的書看。我以爲這已經算最大誇張化了,由於大學我真的不多看書,我記憶中就看過一本C++技術類的,一本C#的,一本Android,還有其餘幾本是什麼都不大記得了,大學畢竟十幾層的圖書館,除了英語四六級的時候進去複習,其餘時間感受都浪費了這十幾層的圖書館。
說說成長過程當中遇到的問題吧,若是遇到我解決不了的,之前是先本身百度谷歌,看看有沒有辦法解決,不行就問老大,而如今,先百度谷歌,看有沒有辦法解決,沒辦法在百度谷歌,實在不行還要看框架源碼如何實現,上國外論壇看外國友人如何解決,問題總能解決的,總會有辦法的。當我開始學習寫架構的時候,我會開始關心遊戲的網絡層使用什麼框架,mina仍是netty,數據怎麼存儲mysql仍是mongo,是否須要緩存redis存什麼,memcached存什麼,緩存什麼數據,數據傳輸用什麼協議,json仍是protobuffer,怎麼寫效率高,最高支持多少併發等等,我想這些都是我如今須要考慮的問題,固然這些都須要根據遊戲具體的需求來決定的,最終服務器可否高效穩定的運行,都是取決於個人架構是否高效穩定,因此這個過程我要不斷學習,不斷吸收別人的經驗。剛到新公司的時候,我才體會到,本身寫代碼其實也是一種挑戰,整個後端我本身一我的實現,代碼是否規範,數據如何存儲,都是我說了算,我想個人代碼不只要高效,還要讓別人看得懂,後來的人能接着個人代碼繼續寫下去。
最後說說Java的題外話,語言之爭,從未停過,爲何有人擁護Java,有人擁護PHP,有人喜歡C#,有人喜歡C++,各個語言各有各的優點,業餘時間,我也瞭解了很多其餘語言,go,node.js我都有了解,我以爲go的語言層面支持協程併發以及node.js的異步,都是很適合遊戲服務器的,我特別看好node.js,異步io真的是對遊戲服務器很好的特性,而且加入對原聲js支持的mongo模塊也是很方便的(上面我有說到,我相信nosql是很適合存儲遊戲數據的)。說到遊戲行業,我認爲h5遊戲的發展也是愈來愈快了,上次白鷺的h5開發者生態大會我去了,白鷺的一整套工做流程,以及web vr,真的很使人興奮(第一輪抽獎我還抽了一個暴風魔鏡,哈哈!),另外,大會的模特挺漂亮,哈哈!2015年,互聯網行業也略呈降低趨勢了,很多創業公司面臨倒閉,泡沫經濟破滅,由於不少老闆抓不住當前經濟形勢,覺得無論是啥,有個app就是創業了,其實全然不知一款app後面有多少運營模式、盈利模式,就像一句諷刺的話,「我有個絕壁好的idea,能夠顛覆bat,什麼都不缺,就缺個程序員了,等等,千萬別告訴馬雲!」,哈哈,聽到這句話,當時我就笑了,估計好多倒閉的創業公司老闆都這麼想的吧,他們並不能抓住用戶真正的需求,只有抓住用戶真正的需求,纔會抓住用戶的心,真正活下來的,纔是用戶真正須要的,然而,相對來講,遊戲行業更是複雜多變,或許今天玩家喜歡這種遊戲,明天玩家就喜歡另外一種遊戲了,就像咱們永遠也想不到,flappy bird、圍住神經病貓這類的遊戲居然能活起來,愚公移山居然也能讓h5遊戲變爲付費的可能。就像一句話,「只要站在風口上,豬也能飛起來!」,只要抓住了玩家此時此刻真正想要的,產品就必定能作起來。
不知不覺,又到晚上了,又要睡覺了,明天還要去加班,遊戲開發之路。Java架構之路,我在路上,我是何金成,我喂本身帶鹽!
以上是我入坑遊戲行業這麼久的一些我的感覺,可能感悟尚淺,但都是我真實的心裏感覺,元旦我再來寫一篇技術篇,記錄我搭建遊戲服務器架構踩過的一些坑。