Erlang 0020 網頁遊戲分線到不分線

2021-06-08 23:21:34 字數 2858 閱讀 5176

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

術語解釋

不同的技術實現"一條線"的概念也不盡相同,我們使用的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中所有的共享資料結構都會由鎖進行保護,執行佇列就是這樣乙個由鎖保護的資料結構。

詳情看這裡:

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

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

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

對於開發者,下一戰又是什麼?

人民幣決定頁遊未來 8166網頁遊戲行業分析

生命周期短皆因過度考慮rmb玩家 網頁遊戲開發成本低,隨之而來帶來的問題,就是新產品的更新換代速度加快。伴隨國內網頁遊戲企業的不斷增多,該領域的競爭加劇導致很多頁遊相對客戶端產品來說,擁有更短的生命週期。國內著名網路遊戲測評師唐楓稱 客戶端產品運營後 成本的時間需要穩定運營兩年,而網頁遊戲往往只需要...

熱門HTML5網頁遊戲 跨平台同步頁遊興起

ea頁遊rts 命令與征服 ceowan.com ea發布html5網頁遊戲 命令與征服 泰伯利亞聯盟 這是一款基於html5開發的即時戰略網頁遊戲,只要你手中的裝置能夠瀏覽網路,不論是電腦 平板還是手機,都能夠 隨時隨地的進行遊戲。泰伯利亞聯盟 採用了泰伯利亞世界觀,鼓勵玩家之間的互動。遊戲型別為...

星痕帝國 v1 1 6 網頁遊戲程式

本遊戲由晗網 hanhot 漢化並運營,支援多國語言,新的演算法,基於xnova0.9開發,有名人堂和客服支援系統,新增艦隊,新增研究,新增新聞系統,可以與facebook整合 在中國大陸我想沒用 smarty的模板引擎 全面支援aks演算法 可以在後台啟用或停用模組,內建作戰模擬器。宣告 本程式僅...