如何對遊戲伺服器全服玩家進行排名?

時間 2021-05-06 17:26:41

1樓:涵曦

用 skiplist 排序,或者 c++的有序 map 排序。可以做到實時排序的,排前 N 名就行。

redis 的 zset 用的就是 skiplist。可以直接拿這個庫去用。

2樓:snow jerry

我看高讚的答主應該沒有做過遊戲開發吧,只根據乙個分數排序的,純記憶體實時排序,跳表、紅黑樹之類的一台機器輕輕鬆鬆解決了,上千萬DAU的遊戲都毫無壓力

3樓:

用引數化的辦法給分數的分布建個模型,比如正態分佈。然後你只要維護那些引數就行了。

來個人要排名,代到模型裡算一算,給個百分比。

最極端是情況是強行假設均勻分布,然後維護最大最小值。

坦克世界的xvm排名似乎就是用的正態分佈。然後每天算一遍。

4樓:farter yang

就是個,OI玩家們都會做的,演算法題,吧。

隨便一種平衡樹,記錄本子樹節點數,記錄父節點。

更新就刪掉再插入。

求自己的排名就一路向上,根據自己是不是右子節點,判斷是否加上左子樹大小。

(剛剛腦抽,直接用分數來查詢也可以,只是只能log時間得到lower_bound而不是現在在樹中的真正排名位置(其實一定程度上也該這樣,並列的,都算最高的那乙個排名嘛))完畢。

5樓:Roc

做遊戲以來一直需要考慮的問題。。。

最近看redis的原始碼,裡面有個zset,可以實現題主的要求。zset的實現是skiplist https://

zh.wikipedia.org/wiki/%

E8%B7%B3%E8%B7%83%E5%88%97%E8%A1%A8

skiplist的增刪改查的時間複雜度都是O(logN),針對某乙個排名範圍[max, min]的查詢,時間複雜度是O(logN + max - min),儲存的空間複雜度是O(N),可以查詢某乙個排名範圍的所有資料。

redis中zset的比較是先優先比較score值,再比較key的值。在遊戲中,通常不會這麼簡單,所以需要自己設計score的計算表示式。

比如說,我們會有需求設計戰鬥力排行榜。先比較戰鬥力,如果相同,再比較玩家等級,如果等級也相同,再比較出生時間。這樣一來,你的score計算式需要設計的比較精巧,而且會隨著開發需要不斷調整。

考慮到跨平台和跨語言使用,參考redis的原始碼,自己用C寫了乙個類似的skiplist,可以自定義比較函式。並實現了lua的庫繫結。

目前在macOS 64bit 2.5GHz Intel Core i5上做了一些測試:

1000k次隨機插入 1.2 seconds

1000k次隨機查詢 0.3seconds

通常情況下可以滿足大部分遊戲的需求,換成bind給lua的庫,效率大概是C版本的1/10

rocaltair/skiplist

6樓:高老師

我做了5年的遊戲伺服器開發,還是有則個回答這個問題的。直接用stl自帶的sort排序就行,因為乙個區也就就幾十萬,上百萬玩家,開服的時候排一次序,平時乙個伺服器活躍玩家也就幾千,頂多上萬,等級,金錢又變化進行事實排序,完全沒有問題。我們伺服器目前就是這麼做的,64位伺服器,32g記憶體,8核2g主頻的cpu

7樓:leung albert

目前做的都是全服前N的需求。有發生改變則對比下第N的值,符合要求則更新。這個排行榜單獨乙個server做,gamesvrd則定時向ranksvrd拉資料。

8樓:朱力

以前策劃就提出過這樣的需求。

目前方案使用過redis中的zset,不過zset有個問題,只能是score對應乙個string,兩個相同的score,是根據sring的字母順序來排序,所以string的生成比較重要,並且將其他資訊儲存在資料庫中。

有人建議過c++直接使用伺服器記憶體,這個時候如果涉及到多台伺服器需要維護乙個排行榜,則就在乙個伺服器中建立排行榜,其他的與該伺服器通訊。

9樓:codedump

你這個需求也許可以改改。

實際上遊戲上的排行榜,比如戰力,金幣等,大家只關注最前面的N名,沒有必要進行全服排序。沒到這個範圍的,可以提示比如」百名開外」這樣的用詞。

做了這個設計上的簡化之後,這就是乙個堆排序的top N的問題了。

至於其他人提到的可以做全域性排序的方案,你權且看看當開闊眼界吧。做產品的時候,還是先找平衡的方式實現需求,而不是為了炫技。

10樓:腮幫俠

爪機打字無力。回去補全

這個看你需求了,只要前多少位和全部排名有很大差別。前者的話只要維護前多少位的排名,如果玩家有分數變化跟這個表比較下就可以了。

如果全排的話也可以分段處理。

遊戲伺服器怎麼選?

磐石雲 1 伺服器CPU的挑選 網頁遊戲伺服器每天接受至少幾百 至多上千萬的訪問量,對CPU的快速吞吐量 穩定性 長時間執行都有著嚴格的要求,因而伺服器CPU是衡量伺服器效能的首要指標。可以根據遊戲的客戶量來進行選擇,當然,也可以前期選擇較低配置,當然不能太低,否則影響玩家的體驗。遊戲使用者量增加之...

遊戲伺服器運維疑惑?

批量伺服器管理方面,可以用ansible 建議學一下python,用於運維工具開發 乙個管理伺服器配置資訊的後台,可以讓會PHP的人開發,當然用python也可以 乙個儲存伺服器配置資訊的cmdb 運維工具通過cmdb獲取遊戲伺服器資訊 IP 埠 然後呼叫ansible的介面。 1 必須要有cmdb...

單機遊戲線上伺服器和網路遊戲伺服器的區別是什麼?

堅果矩陣 您題目中所描述的單機遊戲線上伺服器,如果是gta5或使命召喚這樣的多人遊戲部分,那它本身還是對戰型 MMO型的強聯網伺服器,那和一般意義上的魔獸世界這樣的網路遊戲在伺服器層面講區別不大,都是通過需要遊戲客戶端與遊戲伺服器進行實時連線的,一般是socket這樣的技術來實現的。現在遊戲收入比如...