Posted on 2011-01-19 14:31
點點滴滴 閱讀(1557)
評論(0) 編輯 收藏 引用 所屬分類:
10 服務器
好的結構不是一蹴而就的,而且每個設計者心中的那把尺都不相同,所以這個優秀結構的定義也就沒有定論。在這里,我們不打算對現有游戲結構做評價,而是試著從頭開始搭建一個我們需要的MMOG結構。
對于一個最簡單的游戲服務器來說,它只需要能夠接受來自客戶端的連接請求,然后處理客戶端在游戲世界中的移動及交互,也即游戲邏輯處理即可。如果我們把這兩項功能集成到一個服務進程中,則最終的結構很簡單:
client ----- server
嗯,太簡單了點,這樣也敢叫服務器結構?好吧,現在我們來往里面稍稍加點東西,讓它看起來更像是服務器結構一些。
一般來說,我們在接入游戲服務器的時候都會要提供一個帳號和密碼,驗證通過后才能進入。關于為什么要提供用戶名和密碼才能進入的問題我們這里不打算做過多討論,云風曾對此也提出過類似的疑問,并給出了只用一個標識串就能進入的設想,有興趣的可以去看看他們的討論。但不管是采用何種方式進入,照目前看來我們的服務器起碼得提供一個帳號驗證的功能。
我們把觀察點先集中在一個大區內。在大多數情況下,一個大區內都會有多組游戲服,也就是多個游戲世界可供選擇。簡單點來實現,我們完全可以拋棄這個大區的概念,認為一個大區也就是放在同一個機房的多臺服務器組,各服務器組間沒有什么關系。這樣,我們可為每組服務器單獨配備一臺登錄服。最后的結構圖應該像這樣:
loginServer gameServer
| /
| /
client
該結構下的玩家操作流程為,先選擇大區,再選擇大區下的某臺服務器,即某個游戲世界,點擊進入后開始帳號驗證過程,驗證成功則進入了該游戲世界。但是,如果玩家想要切換游戲世界,他只能先退出當前游戲世界,然后進入新的游戲世界重新進行帳號驗證。
早期的游戲大都采用的是這種結構,有些游戲在實現時采用了一些技術手段使得在切換游戲服時不需要再次驗證帳號,但整體結構還是未做改變。
該結構存在一個服務器資源配置的問題。因為登錄服處理的邏輯相對來說比較簡單,就是將玩家提交的帳號和密碼送到數據庫進行驗證,和生成會話密鑰發送給游戲服和客戶端,操作完成后連接就會立即斷開,而且玩家在以后的游戲過程中不會再與登錄服打任何交道。這樣處理短連接的過程使得系統在大多數情況下都是比較空閑的,但是在某些時候,由于請求比較密集,比如開新服的時候,登錄服的負載又會比較大,甚至會處理不過來。
另外在實際的游戲運營中,有些游戲世界很火爆,而有些游戲世界卻非常冷清,甚至沒有多少人玩的情況也是很常見的。所以,我們能否更合理地配置登錄服資源,使得整個大區內的登錄服可以共享就成了下一步改進的目標。