[轉]一種經典的網絡遊戲服務器架構

轉自:html

http://www.cppblog.com/johndragon/archive/2008/04/10/46768.html服務器

出於學習目的轉載,若是有不穩當或者侵權的話請及時聯繫~網絡




這個圖是一個區的架構圖,全部區的架構是同樣的。上面虛線框的ServerGroup和旁邊方框內的架構同樣。圖上的全部x N的服務器,都是多臺一塊兒的。紅線,綠線,和藍線圖上也有圖示,這裏就很少介紹了。關於Agent Server你們也能看出來,其實就是Gate。
這裏主要介紹下圖上的標記了號碼的位置的數據鏈接的內容和意義。

1-   這是一條WebService的管道,在用戶激活該區賬號,或者修改賬號密碼的時候,經過這條通道來插入和更新用戶的賬號信息。
2-   這也是一條WebService管道,用來獲取和控制用戶該該組內的角色信息,以及進行付費商城代幣之類的更新操做。
3-   這是一條本地的TCP/IP鏈接,這條鏈接主要用來進行服務器組在登錄服務器的註冊,以及登錄服務器驗證賬戶後,向用戶服務器註冊賬戶登錄信息,以及進行對已經登錄的賬戶角色信息進行操做(好比踢掉當前登錄的角色),還有服務器組的信息更新(當前在線玩家數量等)。
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- 服務器選擇完成以後,進入角色管理。同時,角色在不一樣的服務器裏不能共享。

市面上符合上面幾個表現特徵的遊戲至關的多,並且也不乏曠世巨做。這個架構不是一個新的架構,可是它足夠經典和完善,而且邏輯簡單而清晰,用來作MMORPG,或者其它網絡遊戲的服務器架構,是一種不錯的選擇。架構

 

 

—————————————————————————————————我是分割線—————————————————————————————————————————————框架

以後的內容是咱們本身的學習

 

開發到如今實際上是有一些摸着石頭過河的感受的,截至到上週末咱們纔有了第二個server,是一個聊天的服務器,另外一個server獨攬大局,負責登錄、記錄玩家、存儲場景等等看上去不少其實什麼都沒作。server

出於開發簡化考慮咱們的不少處理以及監測都是在客戶端來作的,服務器參與的計算比較少,主要是數據同步轉發廣播這些功能……htm

在sprint3裏面咱們打算作一個新的服務器是計分服務器,換句話說也就是用戶服務器了,不涉及到太多邏輯關係,也只是數據上的一些處理。blog

從上面的框架來看咱們的框架簡直鬆散的不堪一擊,不過咱們有往這個方向來靠攏的想法,畢竟單一服務器工做量太大的話負載高,並且可能形成延遲卡頓等對玩家而言災難性的影響,遊戲

這樣將各個功能分離開確實能夠提升效率,使整個邏輯結構更加清晰。

只寫過各類課程大實驗的我感受架構這個東西實在是神奇……原本架構應該是動工以前就已經敲定好的,咱們就那麼憑着經驗弄到如今……也算是積累了很多的  教訓 吧……

 

從上面轉載的內容來看咱們的遊戲還有比較嚴重的問題就是咱們如今是CLIENT直連各個server的,而缺少一箇中間層也就是agentserver做爲媒介來和後面的server溝通,這也是咱們項目目前作的很差的一點,

改應該是來不及改了,只能在之後的項目(若是還能接觸到相似的項目)中多加註意了。

相關文章
相關標籤/搜索