Posted on 2011-01-19 14:36
點點滴滴 閱讀(1277)
評論(0) 編輯 收藏 引用 所屬分類:
10 服務器
討論了這么久我們一直都還沒有進入游戲世界服務器內部,現在就讓我們來窺探一下里面的結構吧。
對于現在大多數MMORPG來說,游戲服務器要處理的基本邏輯有移動、聊天、技能、物品、任務和生物等,另外還有地圖管理與消息廣播來對其他高級功能做支撐。如縱隊、好友、公會、戰場和副本等,這些都是通過基本邏輯功能組合或擴展而成。
在所有這些基礎邏輯中,與我們要討論的服務器結構關系最緊密的當屬地圖管理方式。決定了地圖的管理方式也就決定了我們的服務器結構,我們仍然先從最簡單的實現方式開始說起。
回想一下我們曾戰斗過無數個夜晚的暗黑破壞神,整個暗黑的世界被分為了若干個獨立的小地圖,當我們在地圖間穿越時,一般都要經過一個叫做傳送門的裝置。世界中有些地圖間雖然在地理上是直接相連的,但我們發現其游戲內部的邏輯卻是完全隔離的。可以這樣認為,一塊地圖就是一個獨立的數據處理單元。
既然如此,我們就把每塊地圖都當作是一臺獨立的服務器,他提供了在這塊地圖上游戲時的所有邏輯功能,至于內部結構如何劃分我們暫不理會,先把他當作一個黑盒子吧。
當兩個人合作做一件事時,我們可以以對等的關系相互協商著來做,而且一般也都不會有什么問題。當人數增加到三個時,我們對等的合作關系可能會有些復雜,因為我們每個人都同時要與另兩個人合作協商。正如俗語所說的那樣,三個和尚可能會碰到沒水喝的情況。當人數繼續增加,情況就變得不那么簡單了,我們得需要一個管理者來對我們的工作進行分工、協調。游戲的地圖服務器之間也是這么回事。
一般來說,我們的游戲世界不可能會只有一塊或者兩塊小地圖,那順理成章的,也就需要一個地圖管理者。先稱它為游戲世界的中心服務器吧,畢竟是管理者嘛,大家都以它為中心。
中心服務器主要維護一張地圖ID到地圖服務器地址的映射表。當我們要進入某張地圖時,會從中心服上取得該地圖的IP和port告訴客戶端,客戶端主動去連接,這樣進入他想要去的游戲地圖。在整個游戲過程中,客戶端始終只會與一臺地圖服務器保持連接,當要切換地圖的時候,在獲取到新地圖的地址后,會先與當前地圖斷開連接,再進入新的地圖,這樣保證玩家數據在服務器上只有一份。
我們來看看結構圖是怎樣的:
中心服務器
/ \ \
/ \ \
登錄服 地圖1 地圖2 地圖n
\ | / /
\ | / /
客戶端
很簡單,不是嗎。但是簡單并不表示功能上會有什么損失,簡單也更不能表示游戲不能賺錢。早期不少游戲也確實采用的就是這種簡單結構。