• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            Fork me on GitHub
            隨筆 - 215  文章 - 13  trackbacks - 0
            <2016年3月>
            282912345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789


            專注即時通訊及網游服務端編程
            ------------------------------------
            Openresty 官方模塊
            Openresty 標準模塊(Opm)
            Openresty 三方模塊
            ------------------------------------
            本博收藏大部分文章為轉載,并在文章開頭給出了原文出處,如有再轉,敬請保留相關信息,這是大家對原創作者勞動成果的自覺尊重!!如為您帶來不便,請于本博下留言,謝謝配合。

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            相冊

            Awesome

            Blog

            Book

            GitHub

            Link

            搜索

            •  

            積分與排名

            • 積分 - 215742
            • 排名 - 118

            最新評論

            閱讀排行榜

            https://www.zhihu.com/question/20405300?sort=created&page=1
            慶亮,廣州明朝,關注erlang/c/hadoop,輕微代…
            Lonng知乎用戶、liberal 等人贊同
            @龐巍偉@貓糧 等同學的回答基本上都是點中關鍵點了,但是部分內容需要糾正下。

            作為算是第一批Erlang應用于webgame(說是始作俑者也不為過)的家伙,補充點當年的實際決策情況,順便糾正幾個錯誤的認識,也算是自黑了不少:

            PS:
            1. 以下內容都是實際在09-10年工作期間的真實情況,但是會盡量少八卦
            2. 選擇什么并不一定重要,做出選擇才重要
            3. 文中如果戳中某些人痛點請不要罵娘
            4. 目前還在游戲行業,頁游、手游領域都有涉及,Erlang也一路堅持了下來,大愛!
            5. 沒深入研究過Erlang的同學,請不要瞎評論了,負點責任好嗎?搞得好像自己是個神,不管什么語言寫兩行就知道精髓了
            6. 這不是個語言爭論的回復,請勿討論誰更好,但是歡迎討論各個語言的優劣勢以及如何揚長避短

            1. 頁游07-09,草根的春天
            國內頁游從07年其實就有崛起之勢,特別是“五分鐘”團隊推出“偷菜”之后,大眾對游戲的態度慢慢開始改變,由抵制、打擊變為合理的接受。 然而由于webgame門檻低、前期市場規模小、天生基于web,造成了早期的webgame很多都是基于PHP、Java、ASP這些在傳統端游開發者看起來很不靠譜的編程語言(在珠三角以PHP最為主流),例如縱橫天下、熱血三國、商業大亨、彈彈堂、明朝時代等;順便提下漢森的《傾城》,Java前后端,在當時的視覺效果真的很好,可惜內部出了問題,源碼泄露、私服泛濫。

            明朝時代截圖:


            09年我來到《明朝時代》團隊時,覺得:我靠,太cool了,PHP居然能夠寫游戲!!! 居然!!!
            ===
            呵呵,很多同學可能就會覺得“那是你沒見識,游戲的技術早就成熟了,你居然還在佩服這種低級玩意”;對,當時的確是沒有見識;但是更多的是當年作為一個新手(只有PHP自學的經驗)對技術的渴望 --- 技術追求的狂熱是被不應該被語言所限制的,就像愛情不分種族。但是不少同學最覺得只有學習C++才是有追求的【不喜勿噴,你可能不是,但是你看看周圍吧,多數的C++同學是這么思考的,等會我還會提個關于C++的八卦】。

            這個時期頁游的特點:技術門檻底、SLG橫行、品質離端游差距巨大;由于這些原因,端游方面的人才基本都不愿意去搞頁游,非常能夠理解這樣的想法,因為感覺起來是一種技術倒退;不過就市場來說,產品需求至上,技術是否先進不能代表一切【理性思考方式之一:不要用觀點A的正確來證明B的錯誤】。


            2. 09-10,我們遇到了問題,認識了Erlang,選擇了Erlang

            在2009年大概是8、9月的樣子,我們看到一款游戲叫做《戰斧》(2.5D即時戰斗網頁游戲《戰斧OL》精美截圖曝光),這是一款09年的基于Flash的網頁ARPG,當時我們看到demo視頻的時候以為是一款客戶端(再次原諒我的淺薄,當時真的沒有想到網頁上可以做出來實時戰斗游戲),當時的心情是:我靠,太cool了(=_=!),我們TMD還在搞什么鳥的SLG,技術太落后了!!!



            2009年10月,《明朝時代》由于技術改進,引入了Ejabberd(erlang著名的開源聊天服務套件)作為游戲的聊天服務器,但是在使用過程中遇到了些技術問題,高潮來了:我們在不懂Erlang的情況下,嘗試修改Ejabberd的源碼,居然解決了我們的性能需求!當時我一方面佩服我當時的老大,一方面驚異于Erlang的神奇:要是C++端,有個10W行代碼,你敢隨便改嗎?

            2009年11月,ECUG在杭州召開,我們幾個PHP都跑去膜拜各路大神,順便請教一下他們在Erlang方面的看法。 期間結識了 @余鋒 (不用介紹了吧) 立濤 @趙東煒 金尹 (這兩位是《Erlang程序設計》的譯者) @許式偉 (許總當年還沒有找到golang) 老范(erlbattle - 惡狼戰役->基于Erlang語言的實時技術學習平臺[Erl Base actual time technic learnning env.]) 侯明園、李杰、崔博、Python大媽(一開始沒認出來)一大批牛人以及周愛民老師。云風當時路過了下,沒有機會深入請教。



            這次技術會議應該是我目前為止收貨最大的一次,當時聽了余老大的PPT基本一遍就記住了(不是懂了),后來請教了以上諸位牛人的建議(當然主要還是余老大給的信心),各位也坦言用Erlang必然會遇到些問題,但是說實話,哪門子語言對于我們來說不會遇到問題呢?因此考慮了如下幾點之后,我們選擇了Erlang作為服務端語言:
            a. Erlang的入門真的很簡單(有同學說不簡單,那我沒辦法)
            b. 不懂C++,Java呢又覺得臃腫
            c. PHP當時有團隊驗證搞ARPG不太適合(c擴展方式我們也搞不定)
            d. 網頁游戲當時“唯快不破”【當時的市場決定的】
            e. 熱更新對于在測試、技術能力上偏弱的一幫人來說,吸引力太大
            f. 1:1模型對于編程復雜度的降低有非常直接的幫助【呵呵,麻煩沒有實踐過的同學不要瞎批評好嗎?有時真的不太懂,你都沒有搞過,怎么就敢理直氣壯】
            g. 天生分布式【誰用誰知道】

            -----
            根據 @bhuztez 的指正,用M:N的說法的確更合適,1:1其實是粒度的不同產生的說法,例如一個玩家一個網絡進程,就是1:1,但是一個玩家一個進程就不合適了,這個時候可能是1:N了。

            八卦一:技術會議本身是開放的,大家有意見討論是正常的;ECUG杭州期間,Erlang主題的時候(忘記是哪位的主題了),兩位C++同學一開始是各自向演講者提問的,后來兩位直接爭起來了;隨著接觸C++同學越來越多,發現C++同學較為容易鄙視其他C++同學的做法,總是認為自己的做法才是符合C++的精髓;結果呢,高手本來就少,還很容易有鄙視鏈。 這個也是我對C++感覺心累的原因之一(我C++沒學好,就不去評論C++本身了)。

            3. 10年,踩坑、填坑Erlang

            2010.1.1 我們團隊4個人沒有放假,過來公司寫代碼,因為實在太興奮了---對于沒有寫過ARPG的人來說,這實在太讓人激動了!
            我們參考了RabbitMQ的代碼結構和網絡部分把框架搭建起來了,基本上是三天左右,這期間還一邊在看書;使用了google protobuff作為通訊協議,順便修正了部分protobuff第三庫的一些bug,花了一周多時間;然后陸續花了2、3周的時間去做了幾個簡單功能,創建角色、登陸、場景、組隊、怪物、戰斗,我們把這個游戲demo稱為mgee(mingchao game engine of erlang version,哈哈,好掉渣的英語,當時以為自己能搞個引擎,其實是無知者無畏),至于流傳到了多少地方應該沒法統計了,有幾個三本學校開Erlang課程用的就是mgee作為基礎。

            到了2010.2月X號,我忘記了,反正后天就是年30了,mgee作為demo已經完成了使命,我們壓測了一下發現只有500的承載能力,這個促使我們去了解跟多的游戲架構知識。

            2010.3月,春節回來,我們團隊到處找人請假,當時征途團隊的技術負責人過來一次過廣州,但是比較可惜沒能有機會當面請教;后來呢,在網上找到一些資料,講的是征途、天龍、魔獸世界等游戲的架構(有些是作者猜的),附上一些圖給大家看下我們當年看到的資料:

            天龍服務端架構思路:
            bigworld:



            QQ游戲大廳:

            基于這樣的資料和我們自己的經驗,我們做了《明朝傳奇》,在線最高到了3100。這期間我們搞明白了1:1該怎么用,mnesia該怎么用,哪些東西是Erlang可以搞得定的(除了怪物尋路,其他邏輯都是基于Erlang),最終明白了一個道理:用不用的好看你個人,語言的約束對群體有效,對個體不一定有效(類似統計與概率),我們從來不鼓吹別人去用Erlang(大家為什么用Erlang,我們只能算是開了頭,不是鼓吹者),我們只是告訴你,用Erlang也可以用得好。

            4. 2011-2012年,Erlang服務端框架簡化

            當時幾個事情促使了我們再往前一步:
            a. 明朝傳奇的代碼我們搞的太復雜,開發和運行效率都不夠高,代碼難以掌握
            b. 當時光環的 @達達來討論如何一機多服,給我們帶來了思路上的很大沖擊:成本控制
            c. 頂端的Erlang不好培養

            基于上面的原因,我們希望新的erlang服務端框架有如下特征:
            a. 簡單、簡單到發指, @謝廷寶 當時大寶推薦了一種服務端設計的簡單標準:有語言經驗的人就能看得懂(并非100%掌握),也就是說看到API知道怎么寫功能。 這里可能有人會吐槽了,你把框架搞的這么強,那些新人能學到什么? 呵呵,源碼在內部是100%開放,每周都有內部分享來分析現有的實現的優缺點,每個人都可以在經過審查后修改核心實現,為什么會限制新人呢?總有些人討論問題喜歡偷換概念,也喜歡指責別人自己做不到的事情。

            b. 性能高,上面龐巍偉同學提到的2000在線是不對的,當時捷游的夢幻飛仙過了4700(不分線、回合);而我們的《仙落凡塵》則是不分線ARPG的情況下到了4300(4399 1服),就當時的CPU和內存使用情況來說,1/3的資源不到。(當時沒有辦法了,游戲地圖設計的不夠大,玩家進入游戲后實在太擠了)

            在原則a的指導下,新人花三天看書、3天寫點入門代碼,1周的確是可以去寫點簡單的功能的。(在珠三角的同學歡迎當面來討論驗證)但是如果你要求1周就能多么熟悉、深入,這誰也做不到。

            4. 2013-2015,Erlang在內部算是真正的落地

            真要讓一門技術變為解決方案,光靠堅持不夠,我們在內部也做了一些事情來幫助Erlang在內部至少可以形成簡單的生態群:
            a. 成立虛擬的Erlang框架引擎組,負責在各個項目組之間同步優秀代碼、統一基礎框架、剝離業務抽象邏輯【由于這邊的文化氛圍,推進起來相對容易】
            b. 剝離公用非游戲專用服務,例如mlog(通用日志服務)、mbd(通用大數據服務)、mchat(通用聊天監控服務)、mservice(通用托管服務),提供給各部門各項目使用

            這樣,配合少量開源庫,基本上能夠做到快速穩定高效,也不會那么容易遇到技術瓶頸,技術的應用方向也不會太狹隘。

            5. 一點總結

            a. 用了Erlang接近5年,越是深入越是覺得Erlang神奇,集中點還是Erlang的設計哲學,這里推薦一篇文章: Erlang的調度原理(譯文)來了解下。
            b. 我從c/php/erlang一路走過來,算是對編譯型、腳本、函數式語言有個比較橫向的了解,推薦時間較寬裕的同學深入學學Erlang,不一樣的哲學會極大的豐富你的世界觀,影響你的方法論(好吧,看起來有點雞湯了)
            c. 像分布式、熱更新等都是非常重要的基礎設施,真正的高手自然不需要,但是你是否需要這些還是可以判斷的(多數人并非天才)
            d. 感謝 @余鋒 這樣的人一直在堅持,總有人會讓你覺得感動,感動于他們的堅持、分享,世界并非非黑即白,而是多姿多彩。Erlang、C++、C、PHP、Scala都是一部分。
            e. 你或者你們團隊用不用Erlang,要看你或者你們團隊的經驗、產品需要、職業發展、成本等來綜合考慮,并不是一句話能夠說明的清楚的。而我只是想說一般來說,堅持能解決大部分問題,沒有多少所謂的彎路,Erlang和C++等語言誰好誰壞也不是一句話能定論的。

            6. 其他補充


            a. 當年的游戲服務端demo:qingliangcn/mgee · GitHub
            posted on 2016-03-14 17:12 思月行云 閱讀(2254) 評論(0)  編輯 收藏 引用 所屬分類: Erlang
            九九热久久免费视频| 一本久久知道综合久久| 丁香色欲久久久久久综合网| 国产精品成人久久久久三级午夜电影| 嫩草伊人久久精品少妇AV| 久久99九九国产免费看小说| 97精品伊人久久久大香线蕉| 成人妇女免费播放久久久| 久久99精品久久久久久久久久| 久久精品日日躁夜夜躁欧美| 久久精品国产99久久久香蕉| 精品国产一区二区三区久久| 国产精品久久网| 国产成人久久激情91| 无码人妻久久久一区二区三区| 99久久免费国产精品特黄| 久久丫忘忧草产品| 亚洲国产精品久久电影欧美| 无码人妻久久一区二区三区免费| 人妻无码αv中文字幕久久琪琪布 人妻无码久久一区二区三区免费 人妻无码中文久久久久专区 | 久久无码AV中文出轨人妻| 狠狠人妻久久久久久综合| 久久久久无码精品| 亚洲人AV永久一区二区三区久久| 少妇被又大又粗又爽毛片久久黑人| 亚洲伊人久久成综合人影院| 女人高潮久久久叫人喷水| AV无码久久久久不卡蜜桃| 久久精品aⅴ无码中文字字幕不卡| 久久精品亚洲精品国产色婷| 色综合合久久天天综合绕视看| 久久精品无码一区二区三区| 9999国产精品欧美久久久久久 | 狠狠色噜噜狠狠狠狠狠色综合久久| 国产精品九九九久久九九| 久久99精品国产麻豆蜜芽| 亚洲人成电影网站久久| 99久久人妻无码精品系列| 精品久久久久国产免费| 国产成人精品综合久久久久| 丰满少妇人妻久久久久久|