1、網路遊戲mmorpg整體伺服器框架,包括早期,中期,當前的一些主流架構
網路協議 網路io 訊息 廣播 同步 cs tcp/udp ip 集群 負載均衡 分布式
阻塞/非阻塞/同步/非同步 proactor/reactor/actor select/poll/epoll/iocp/kqueue
遊戲開發中的設計模式/資料結構
短連線和長連線 遊戲安全 快取 訊息編碼協議 指令碼語言
socket nagle/粘包/截斷/tcp_nodelay ai/場景 分線/分地圖 開源mmorpg伺服器
三.正文框架結構
1. 早期的mmorpg伺服器結構
client<->gameserver<->db 所有業務,資料集中處理
優點:簡單,快速開發
缺點:1.所有業務放在一起,系統負擔大大增加.乙個bug可能導致整個伺服器崩潰,造成所有玩家掉線甚至丟失等嚴重後果。
2.開服一剎那,所有玩家全部堆積在同乙個新手村.->>>>卡,客戶端卡(同屏人數過多渲染/廣播風暴) 伺服器卡(處理大量同場景訊息/廣播風暴)
2. 中期-使用者分離集群式
gameserve1
client | db
gameserver2
玩家不斷增多->分線->程式自動或玩家手動選擇進入
缺點:運營到後期,隨著每條線玩家的減少, 互動大大減少。
3. 中後期 資料分離集群式
按地圖劃分伺服器,當前主流
新手村問題:《天龍八部》提出了較好的解決方案,建立多個平行的新手村地圖,一主多副,開服時盡可能多的同時容納新使用者的湧入,高等級玩家從其它地圖回新手村只能到達主新手村。
4. 當前主流的網路遊戲架構
注:在gateserver和centerserver之間是有一條tcp連線的。而gameserver和logserver之間的連線可以是udp連線。這是有乙個大概的圖,很多地方需要細化。
gateserver:閘道器伺服器,agentserver、proxyserver
優點:
(1)作為網路通訊的中轉站,負責維護將內網和外網隔離開,使外部無法直接訪問內部伺服器,保障內網伺服器的安全,一定程度上較少外掛程式的攻擊。
(2)閘道器伺服器負責解析資料報、加解密、超時處理和一定邏輯處理,這樣可以提前過濾掉錯誤包和非法資料報。
(3)客戶端程式只需建立與閘道器伺服器的連線即可進入遊戲,無需與其它遊戲伺服器同時建立多條連線,節省了客戶端和伺服器程式的網路資源開銷。
(4)在玩家跳伺服器時,不需要斷開與閘道器伺服器的連線,玩家資料在不同遊戲伺服器間的切換是內網切換,切換工作瞬問完成,玩家幾乎察覺不到,這保證了遊戲的流暢性和良好的使用者體驗。
缺點:
2由於閘道器的單節點故障導致整組伺服器無法對外提供服務的問題
dcserver:資料中心伺服器。主要的功能是快取玩家角色資料,保證角色資料能快速的讀取和儲存
centerserver:全域性伺服器/中心伺服器,也叫worldserver. 主要負責維持gameserver之間資料的**和資料廣播。另外一些遊戲系統也可能會放到center上處理,比如好友系統,公會系統。
改進:將閘道器伺服器細化為logingateserver和多個gamegateserver.
5. 按業務分離式集群
由於網路遊戲存在很多的業務,如聊天,戰鬥,行走,npc等,可以將某些業務分到單獨的伺服器上。這樣每個伺服器的程式則會精簡很多。而且一些大流量業務的分離,可以有效的提高遊戲伺服器人數上限。
優點:1.業務的分離使得每種伺服器的程式變的簡單,這樣可以降低出錯的機率。即使出錯,也不至於影響到每乙個整個遊戲的進行,而且通過快速啟動另一台備用伺服器替換出錯的伺服器。
2.業務的分離使得流量得到了分散,進而相應速度回得到提公升 。
3.大部分業務都分離了成了單獨的伺服器,所以可以動態的新增,從而提高人數上限。
改進:甚至可以將登陸伺服器細化拆分建角色,選擇角色伺服器
6. 一種簡單實用的網路遊戲伺服器架構
gls:game login server,遊戲登入伺服器,某種程式上,其不是核心元件,gls呼叫外部的介面,進行基本的使用者名稱密碼認證。此外需要實現很多附屬的功能:登入排隊 (對開服非常有幫助),gm超級登入通道(gm可以不排隊進入遊戲),封測期間啟用使用者控制,限制使用者登入,控制客戶端版本等。
db:實質上是後台sql的大記憶體緩衝,隔離了資料庫操作,比較記憶體中的資料,只把改變的資料定時批量寫入sql。系統的演算法,開發穩定性都要求非常高。
角色入口:玩家登入遊戲後的選擇角色
gs:game server,最核心元件,同一地圖,所有遊戲邏輯相關的功能,都在這裡完成。
gate:建立和使用者的常鏈結,主要作sockt**,遮蔽惡意包,對gs進行保護。協議加密解密功能,乙個gate共享多個gs,降低跳轉地圖連線不上的風險。
im,關係,寄售:表示其它元件,負責對應的跨地圖發生全域性的遊戲邏輯。
7.另乙個架構圖
1- 這是一條webservice的管道,在使用者啟用該區帳號,或者修改帳號密碼的時候,通過這條通道來插入和更新使用者的帳號資訊。
2- 這也是一條webservice管道,用來獲取和控制使用者該該組內的角色資訊,以及進行付費**代幣之類的更新操作。
4- 這也是一條本地tcp/ip連線,這條連線用來對連線到gameserver的客戶端進行驗證,以及獲取角色資料資訊,還有傳回gameserver上角色的資料資訊改變。
5- 這條連線也是一條本地的tcp/ip連線,它用來進行公共資訊伺服器和數個遊戲伺服器間的互動,用來交換一些遊戲世界級的資訊(比如公會資訊,跨服組隊資訊,跨服聊天頻道等)。
6- 這裡的兩條連線,想表達的意思是,userserver和gameserver的agent是可以互換使用的,也就是玩家進入組內之後,就不需要再切換 agent。如果不怕亂套,也可以把登陸伺服器的agent也算上,這樣使用者整個過程裡就不需要再更換agent,減少重複連線的次數,也提高了穩定性。 (畢竟連線次數少了,也降低了連不上伺服器的出現機率)
在這個架構裡面,gameserver實際上是乙個遊戲邏輯的綜合體,裡面可以再去擴充套件成幾個不同的邏輯伺服器,通過publicserver進行公共資料交換。
userserver實 際上扮演了乙個servergroup的領頭羊的角色,它負責向loginserver註冊和更新伺服器組的資訊(名字,當前人數),並且對agent進 行排程,對選擇了該組的玩家提供乙個使用者量最少的agent。同時,它也兼了乙個角色管理伺服器的功能,傳送給客戶端當前的角色列表,角色的建立,刪除, 選擇等管理操作,都是在這裡進行的。而且,它還是乙個使用者資訊的驗證伺服器,gameserver需要通過它來進行客戶端的合法性驗證,以及獲取玩家選擇 的角色資料資訊。
採用這種架構的遊戲,通常有以下表現。
1- 使用者必須啟用乙個大區,才能在大區內登陸自己的帳號。
2- 使用者啟動客戶端的時候,彈出乙個登陸器,選擇大區。
3- 使用者啟動真正的客戶端的時候,一開始就是輸入帳號密碼。
4- 帳號驗證完成之後,進行區內的伺服器選擇。
5- 伺服器選擇完成之後,進入角色管理。同時,角色在不同的伺服器裡不能共享。
網路遊戲 伺服器
using system using system.collections.generic using system.linq using system.text using system.threading.tasks using system.net.sockets using system.n...
伺服器架構 一種經典的網路遊戲伺服器架構
首先,二話不說,上圖 用windows畫圖畫的。這個圖是乙個區的架構圖,所有區的架構是一樣的。上面虛線框的servergroup和旁邊方框內的架構一樣。圖上的所有x n的伺服器,都是多台一起的。紅線,綠線,和藍線圖上也有圖示,這裡就不多介紹了。關於agent server大家也能看出來,其實就是ga...
《網路遊戲伺服器程式設計》
fd clr s,set removes the descriptor s from set.fd isset s,set nonzero if s is a member of theset.otherwise,zero.fd set s,set adds descriptor s to set....