• <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>

            牽著老婆滿街逛

            嚴以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            網頁游戲分線到不分線

            轉載自:http://www.cnblogs.com/me-sa/archive/2011/12/10/erlang0020.html

                 這一年來可以明顯看到一個變化:網頁游戲分線從標配逐漸變成了可選,越來越多的游戲開始不分線;當初為什么要分線?現在為什么又不分線?技術上面臨著什么挑戰?僅僅是技術問題么?

            術語解釋

                不同的技術實現"一條線"的概念也不盡相同,我們使用的Erlang實現,這里的一條線對應Erlang的一個VM.

            為什么要分線?

                 可以通過比較來回答這個問題:所有玩家都在同一條線上 VS 同樣數量的玩家被分配在多條線;如果所有玩家(假定1000人)都在一條線上首先同一場景的玩家數就會比較高,特別是一些游戲的熱點區域比如副本入口,主城中心,傳送門等等,當然同屏人數也會高;服務器端對應相關場景的廣播壓力,和業務邏輯的運算壓力都集中在一條線上。而進行了分線之后,相當于把玩家做了分流,同一場景以及同屏的人數都會減少,一方面服務器端單條線的運算壓力下降了,另一方面客戶端的同屏人數也降了下來;

               分線實際上幫服務器端和客戶端都減輕了壓力,特別是很長一段時間內Flash客戶端的同屏人數一直有人數限制,多數游戲能做到100多人,不會超過200人;這實際上是木桶理論中的短板,即使服務器端能做到不分線,客戶端也支撐不了那么高的同屏;(當然現在這個問題已經有了突破)

               總結一下,為什么分線:分擔運算壓力 同屏人數限制

             

            分線對設計的影響

                分線實際上是突破技術瓶頸支撐更多玩家的方案,一旦分線自然就會帶來"換線"和"跨線"的問題;所謂換線,就是玩家顯示的從一條線路切換到另一條線路;不在同一條線的玩家就屬于"跨線";玩家一個在1線,一個在2線,他們要交易怎么辦?組隊呢?聊天呢?戰斗呢?即使是忽略掉交互的因素,只看一個玩家,這一個玩家上線應該選擇哪條線?如果玩家在戰斗,交易,掛機等狀態下能夠換線么?在這些狀態下下線然后上線怎么處理?

               本質上換線實際上是玩家數據從一個Erlang節點遷移到另一個Erlang節點,有一個銷毀和重建的過程;而跨線是兩個玩家的數據在不同的Erlang節點內。

               一部分解決方案是來自于策劃,會有一些游戲狀態的互斥,比如不允許跨線交易,不允許在修煉狀態換線,等等;另外一方面就要在做設計的時候充分考慮分線了:

                玩家不在一條線怎么辦?玩家當前能不能換線?玩家在當前這個狀態換線了怎么辦?玩家下線之后再上線怎么辦?我這個服務是全局的應該怎么辦?......

                具體技術實現上,Erlang做這個有先天優勢,啟動多個節點,設計一個網關節點做負載均衡;做水平擴展是很容易的。

             

            分線血淚

               可以發現分線的設計需要在完成某一個功能的同時考慮到多條線的情況,會增加問題的復雜度;我不知道有多少采取分線策略的游戲曾經因為分線栽過跟頭,我們就差點因為分線的一個bug把游戲經濟系統搞死;事情大概經過:

               某周日23點左右 運營的同事告訴我游戲內有玩家金幣異常

               23:30左右到公司  封號,分析日志,發現金幣來源應該是玩家交易,排除服務器被攻擊可能

               0點左右  封鎖了交易的所有協議,停服更新

               1點左右 發現還有一處可能出現問題的地方 再次更新

               2點 從玩家日志庫抓取異常玩家的數據做分析 發現玩家金幣成倍增長2 4 8 16 32 64 也就是說,金幣被”復制了“,但是玩家怎么做到的?是自己和自己交易么?分析代碼雖然缺少這個防護,但是交易使用的SQL也保證了他得不到收益。

               3:00 ~5:00 在本地測試環境,反復模擬各種情況下的交易,答案:當時游戲存在一個分線選擇的bug導致玩家可以同時登陸兩條線,玩家使用兩個賬號反復登陸換線,然后進行交易就可以把金幣通過交易復制;  

                6點左右補丁做好熱更新第一個版本

                7點左右客戶端補丁也做了分發

               第二天運營提交了相關賬號的修復規則,一個游戲的充值有一個前提保證就是游戲內的經濟系統穩定,一旦出現刷金幣之類的事情搞亂了經濟系統,這個游戲服也就死掉了;

             

            為什么不分線了?

                首先分線的種種限制,比如跨線不能交易等等增加了玩家操作步驟,需要玩家先選擇換線;另外,分線分流玩家分散了壓力也分散了人氣,顯得游戲不熱鬧;

                其次在Flash同屏問題已經有了優化方案,可以看一下現在非常火爆的神魔遮天,它的同屏人數遠遠超出了100的限制;觀察一下神魔遮天的處理,當一個區域聚集了很多人的時候,它并不是一下全部渲染出來,而是一個一個渲染出來的;還有一些客戶端的優化策略,這些方案的組合結果就是同屏人數可以更多;

             

            怎么實現?

                有的不分線是通過拆分游戲的功能模塊實現的,比如把場景運算放在單獨的erlang節點,以功能為單位拆分成多個節點分擔壓力;一旦壓力上去就可以通過增加對應的功能節點來緩解壓力;實際上是換了一種分擔壓力的方式,對于客戶端和玩家這些都是透明的。

               我們從分線到不分線更困難一些,之前所有的邏輯都是在一個節點內完成,很難按照功能拆分游戲,那將是顛覆性的。咨詢立濤,他給我們的建議是只開一條線,開啟SMP,單線支撐2000~3000人應該沒有問題。

               Erlang SMP VM比普通Erlang VM要慢那么一點點,但是可以充分發揮多核優勢 摘錄一點資料:

               從OTP R12B開始,如果操作系統報告有多于1個的CPU(或者核心)VM的SMP版本會自動啟動,并且根據CPU或者核心的數量啟動同樣數量的調度器。

                沒有SMP支持的Erlang VM只有1個運行在主處理線程中的調度器。該調度器從運行隊列(run-queue)中取出可以運行的Erlang進程以及IO任務,而且因為只有一個線程訪問他們所以無須鎖定任何數據。而帶有SMP支持的Erlang VM可以有一個或多個調度器,每個運行在一個線程中。調度器從同一個公共運行隊列中取出可運行的Erlang進程和IO任務。在SMP VM中所有的共享數據結構都會由鎖進行保護,運行隊列就是這樣一個由鎖保護的數據結構。

               詳情看這里:http://shiningray.cn/some-facts-about-erlang-and-smp.html

               實踐過程中,我們還是采取了一個折中的方案,只要玩家在一條線上不超過閾值,就只開啟這一條線,客戶端也沒有線路選擇的功能,如果超過閾值,就開啟新線路,并通知客戶端顯示選線功能;

             

            僅僅是技術問題么?

               從分線到不分線不僅僅是技術問題,策劃同樣要做調整,比如游戲內的一些容易堆積玩家的區域要想辦法分散壓力,比如增加入口,修改NPC位置等等;還有一些數值限制也需要重新考慮,比如一個活動分線模式最多只允許30個玩家參與,不分線了這個限制就要改掉否則大部分玩家都參與不了這個活動。

               單服最高在線超過3000人怎么辦?首先現在游戲平臺能推到這個在線的情況都很少了;其次如果超過這個值,一般都是開啟新服,也就是通過運營手段而非技術手段解決這個問題。

             

              從分線到不分線,下一站是什么?一個世界?

              對于開發者,下一戰又是什么?


            posted on 2012-11-22 11:16 楊粼波 閱讀(855) 評論(1)  編輯 收藏 引用 所屬分類: 文章收藏網絡編程

            評論

            # re: 網頁游戲分線到不分線 2012-11-22 15:08 戰魂小筑

            希望看到更多的此類經驗處理, 感覺不錯  回復  更多評論   

            久久综合亚洲色一区二区三区| 97久久久精品综合88久久| 亚洲AV无码1区2区久久| 久久久久久无码国产精品中文字幕| 久久国产免费观看精品3| 伊人久久大香线蕉综合Av| 国产成人综合久久精品红| 亚洲国产精品无码久久青草 | 东方aⅴ免费观看久久av| 久久人人爽人爽人人爽av| 国产伊人久久| 久久久久久青草大香综合精品| 91久久精品电影| 国产精品成人99久久久久91gav | 国产高潮国产高潮久久久| 久久亚洲AV成人出白浆无码国产 | 久久夜色精品国产亚洲av| 人妻精品久久久久中文字幕| 午夜精品久久久久久久无码| 伊人久久大香线蕉综合5g| 区久久AAA片69亚洲| 天天躁日日躁狠狠久久| 国产国产成人精品久久| 99久久精品国产一区二区| 日日狠狠久久偷偷色综合0 | 亚洲中文字幕无码久久精品1 | 天天综合久久久网| 精品久久久无码中文字幕天天| 亚洲国产成人乱码精品女人久久久不卡 | 久久久不卡国产精品一区二区| 无码人妻少妇久久中文字幕| 久久精品国产日本波多野结衣| 99久久婷婷国产综合亚洲| 国产亚州精品女人久久久久久| 久久久国产视频| 久久精品国产亚洲一区二区| 伊人久久大香线蕉综合网站| 少妇精品久久久一区二区三区| 91久久成人免费| 亚洲日本va中文字幕久久| 狠狠精品干练久久久无码中文字幕|