游戲服務器體系結構

本文描述了一個我所設計的游戲服務器體系結構,其目的是實現游戲服務器的動態負載平衡,將對象從繁忙的服務器轉移到相對空閑的服務器中.設計并沒有經過具體的測試與驗證,僅僅是將自己目前的一些想法記錄下來.隨著新構思的出現,可能會有所變化.

以下是服務器的邏輯視圖,其中忽略了管理和監控模塊

--------------------------------------------------------
|邏輯服務|碰撞服務|AOI服務|dateserver|AI|尋路|交易服務|
--------------------------------------------------------
??? /\????? /\??????? /\????? /\????? /\? /\???? /\
??? ||????? ||??????? ||????? ||????? ||? ||???? ||
??? \/????? \/??????? \/????? \/????? \/? \/???? \/
---------------------------------------------------------
????????????????? 消息轉發層
---------------------------------------------------------
???????????????????????? /\
???????????????????????? ||
???????????????????????? \/
?????????????????????? ------
?????????????????????? |gate|
?????????????????????? ------
???????????????????????? /\
???????????????????????? ||
???????????????????????? \/
????????????????????? --------
????????????????????? |client|
????????????????????? --------

具體實現中消息轉發層可作為單獨的一組服務運行,也可以作為單獨的服務器
進程中的單獨一層.

目前在我的設計方案中,將其作為進程中的一個服務層實現.
--------------
|? 應用層??? |
-----------
|數據轉發層| |
-----------
|? 網絡層??? |
--------------

各層說明

應用層: 具體應用,例如游戲邏輯,AI,等.

數據轉發層:處理消息的路由,將消息投遞到正確的套接口發送隊列中.

網絡層:收發數據.同時支持TCP,UDP等協議.

當接收消息時,無須通過第二層,從網絡層直接將接收到的完整消息投遞到

應用層中.

發送消息時,從應用層將消息傳進數據轉發層,并且指定消息通知方式(例如通

過TCP將消息傳遞到某一臺服務器,還是通過udp方式將消息廣播出去),由轉發層將消息投遞到正確的套接口中.

基本消息流如下:

1)客戶端發起操作

2)AOI服務,AOI處理的主要是對象的位置信息,以及各對象所關注的其它對象.

以下舉例說明幾種處理:

對于行走,AOI計算出能觀察到此玩家的所有對象然后將這些信息一起打包,轉到3.

對于攻擊行為,AOI計算出此攻擊將影響的對象和可以觀察到此次攻擊的對象,然后將信息打包,轉發到3.

對于僅僅影響自己屬性的消息,例如喝血,如果有對象關注你,例如組隊.則將關注你對象打包,轉發到4.

3)碰撞和校驗,根據地圖信息,校驗操作的合法性,并進一步計算操作所影響對的象.例如對于行走,在沒有詳細地圖信息的AOI中,無法知道玩家之間是否隔了一堵墻,在碰撞和校驗中,將把墻另一面的所有對象從可觀察對象中去除.當通過校驗后,對于行走消息,將玩家的新坐標通知給所有可以觀察到的對象,并更新AOI在的玩家坐標.如果是攻擊動作,則把所有信息打包,并送往4.

4)邏輯處理.將處理結果通知關注的對象.

對于跨服數據的處理

服務器的設計實現了動態負載平衡,和無縫大地圖,以使得在一臺服務器上的對象,可以觀察到并影響另一臺服務器上對象的變化.以下說明跨服攻擊,

假設A,與B分別處理兩臺不同的邏輯服務器SA,SB上.A向B發動進攻,并且已經通過了校驗.當B進入A可觀察范圍內的時候,SB會獲得一份A的基本數據的副本,對于這份副本在SB上是只讀的.SB計算出此次攻擊對A的影響,例如血減少多少,然后將對A的數據更改要求發送到SA.SA實際修改A的數據,并將更新廣播出去,所有關注A的服務器都會處理這個更新信息,并做出合適的處理.

對于玩家間的物品交易,買賣,贈送等操作,都將交由交易服務器處理,以實現跨服的交易.

以上僅僅是概要說明,一些詳細的設計將會在后續的文章中討論.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/444968.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444968.shtml
英文地址,請注明出處:http://en.pswp.cn/news/444968.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

游戲服務器架構探討

要描述一項技術或是一個行業,一般都會從其最古老的歷史開始說起,我本也想按著這個套路走,無奈本人乃一八零后小輩,沒有經歷過那些苦澀的卻令人羨慕的單機游戲開發,也沒有響當當的拿的出手的優秀作品,所以也…

leetcode72 編輯距離

給定兩個單詞 word1 和 word2,計算出將 word1 轉換成 word2 所使用的最少操作數 。 你可以對一個單詞進行如下三種操作: 插入一個字符 刪除一個字符 替換一個字符 示例 1: 輸入: word1 "horse", word2 "ros" 輸出: 3 解釋: ho…

即時通訊系統架構

有過幾款IM系統開發經歷,目前有一款還在線上跑著。準備簡單地介紹一下大型商業應用的IM系統的架構。設計這種架構比較重要的一點是低耦合,把整個系統設計成多個相互分離的子系統。我把整個系統分成下面幾個部分:(1)狀態…

leetcode303 區域和檢索

給定一個整數數組 nums,求出數組從索引 i 到 j (i ≤ j) 范圍內元素的總和,包含 i, j 兩點。 示例: 給定 nums [-2, 0, 3, -5, 2, -1],求和函數為 sumRange() sumRange(0, 2) -> 1 sumRange(2, 5) -> -1 sumRange(0,…

算法(24)-股票買賣

股票買賣1.動態規劃框架LeetCode-121 一次買賣LeetCode-122 不限次數LeetCode-309 不限次數冷凍期LeetCode-714 不限次數手續費LeetCode-123 兩次買賣LeetCode-188 k次買賣2.貪心特解LeetCode-121 一次買賣LeetCode-122 不限次數解題思路參考buladong解題,詳細信息可…

網絡游戲的客戶端同步問題 .

有關位置同步的方案實際上已經比較成熟,網上也有比較多的資料可供參考。在《帶寬限制下的視覺實體屬性傳播》一文中,作者也簡單提到了位置同步方案的構造過程,但涉及到細節的地方沒有深入,這里專門針對這一主題做些回顧。 最直接的…

leetcode319 燈泡的開關

初始時有 n 個燈泡關閉。 第 1 輪,你打開所有的燈泡。 第 2 輪,每兩個燈泡你關閉一次。 第 3 輪,每三個燈泡切換一次開關(如果關閉則開啟,如果開啟則關閉)。第 i 輪,每 i 個燈泡切換一次開關。 …

網游服務器端設計思考:心跳設計

網絡游戲服務器的主要作用是模擬整個游戲世界,客戶端用過網絡連接把一些信息數據發給服務器,在操作合法的情況下,更新服務器上該客戶端對應的player實體、所在場景等,并把這些操作及其影響廣播出去。讓別的客戶端能顯示這些操作。…

算法(25)-括號

各種括號1.LeetCode-22 括號生成--各種括號排列組合2.LeetCode-20 有效括號(是否)--堆棧3.LeetCode-32 最長有效括號(長度)--dp4.LeetCode-301刪除無效括號 --多種刪除方式1.LeetCode-22 括號生成–各種括號排列組合 數字 n 代表生成括號的對數,請你設計一個函數&a…

(二十)深入淺出TCPIP之epoll的一些思考

Epoll基本介紹 在linux的網絡編程中,很長的時間都在使用select來做事件觸發。在linux新的內核中,有了一種替換它的機制,就是epoll。相比于 select,epoll最大的好處在于它不會隨著監聽fd數目的增長而降低效率。因為在內核中的select實現中,它是采用輪詢來處理的,輪詢的fd…

leetcode542 01矩陣

給定一個由 0 和 1 組成的矩陣,找出每個元素到最近的 0 的距離。 兩個相鄰元素間的距離為 1 。 示例 1: 輸入: 0 0 0 0 1 0 0 0 0 輸出: 0 0 0 0 1 0 0 0 0 示例 2: 輸入: 0 0 0 0 1 0 1 1 1 輸出: 0 0 0 0 1 0 1 2 1 注意: 給定矩陣的元素個數不超過 10000。…

RPC、RMI與MOM與組播 通信原理 .

遠程過程調用(RPC): 即對遠程站點機上的過程進行調用。當站點機A上的一個進程調用另一個站點機上的過程時,A上的調用進程掛起,B上的被調用過程執行,并將結果返回給調用進程,使調用進程繼續執行【…

網關服務器 .

之前想著要把什么什么給寫一下,每次都太懶了,都是想起了才來寫一下。今天只討論游戲服務器的網關服務器。 1.轉發 轉發客戶端和服務器間的消息,網關將場景、會話、數據、名字、平臺等服務器的數據轉發給客戶端,接收客戶端的數據&a…

算法(26)-最長系列

最長系列1.LeetCode-32 最長有效括號--子串2.LeetCode-300 最長上升子序列--長度3.LeetCode-32 最長回文子串--是什么5.LeetCode-512 最長回文子序列--長度6.LeetCode-1143 最長公共子序列--長度6.LeetCode-128 最長連續序列--長度7.LeetCode-14 最長公共前綴-字符串8.劍指offe…

一個簡單的游戲服務器框架 .

最近一段時間不是很忙,就寫了一個自己的游戲服務器框架雛形,很多地方還不夠完善,但是基本上也算是能夠跑起來了。我先從上層結構說起,一直到實現細節吧,想起什么就寫什么。 第一部分 服務器邏輯 服務器這邊簡單的分為三…

游戲登陸流程 .

當公司有很多游戲的時候,那么公司往往會有一個統一的賬號管理平臺,就就像盛大通行證、網易通行證,戰網平臺,這些平臺統一管理游戲的賬號數據。 打個比方,現在我們玩星辰變,那么玩家登陸游戲的時候…

leetcode97 交錯字符串

給定三個字符串 s1, s2, s3, 驗證 s3 是否是由 s1 和 s2 交錯組成的。 示例 1: 輸入: s1 "aabcc", s2 "dbbca", s3 "aadbbcbcac" 輸出: true 示例 2: 輸入: s1 "aabcc", s2 "dbbca", s3 "aadbbbaccc" 輸…

算法(27)-最大系列

最大系列1.LeetCode-239 滑動窗口的最大值2.LeetCode-53 連續子數組的最大和3.LeetCode-152 乘積最大的子數組。4.劍指 Offer 14- I. 剪繩子為k個整數段,使各個段成績最大1.dp數學推導1.LeetCode-239 滑動窗口的最大值 窗口由左往右最大值數組Left,和由…

mysql數據庫表的導入導出

MySQL寫入數據通常用insert語句,如 復制代碼 代碼如下: insert into person values(張三,20),(李四,21),(王五,70)…; 但有時為了更快速地插入大批量數據或…

leetcode 33 搜索旋轉排序數組 到處是細節的好題

這個題想了想就會做,只是細節真的能卡死人,找了好久的bug。甚至我懷疑我現在的代碼可能還有錯,只是沒例子測出來。 假設按照升序排序的數組在預先未知的某個點上進行了旋轉。 ( 例如,數組 [0,1,2,4,5,6,7] 可能變為 [4,5,6,7,0,1…