遊戲伺服器架構設計中的一些思考

遊戲伺服器架構設計中的一些思考作者: zhanghefu (1 篇文章)日期: 十一月 30, 2010 在 4:06 下午

遊戲伺服器架構設計中的一些思考

1、 遊戲世界由很多個遊戲對象組成(遊戲角色、物品、NPC、技能等);

2、 一個遊戲對象的有效數據主要存放在客戶端、遊戲伺服器和持久性資料庫中;

3、 遊戲對象的處理可劃分為與位置有關的和與位置無關的,如公會處理、物品處理等主要行為可以看作是與位置無關的處理,而NPC(AI)、戰鬥、移動這類的主要行為可以看成是與位置有關的。

4、 從客戶端的角度來看,遊戲行為可分為四類動作:

a) 來自伺服器端的動作,如另外一個玩家跳起來。

b) 本地動作。僅僅發生在本地客戶端的動作,不需要與伺服器端或其他客戶端通訊。

c) 先執行後驗證的可撤銷的動作。客戶端先執行,再提交伺服器端驗證,驗證不成功通知客戶端將執行的動作撤銷。比如玩家控制的遊戲角色執行移動處理。

d) 嚴格伺服器端驗證的動作。客戶端執行動作前必須經過伺服器端驗證後才能執行。如交易行為、攻擊其他玩家/NPC。

5、 客戶端和伺服器,伺服器進程之間的相互的通信從邏輯上看就是就是向RemoteObject 發起的遠程過程調用(RPC),RPC主要有兩種類型:

a) 通知(Notify)。只通知對方,而不關心和需要對方返回結果。

b) 請求(Request)。向對方發起請求,對方處理請求後返回結果,發起請求和返回結果這個過程可以是同步或非同步。遊戲伺服器中絕大部分RPC請求都是非同步的。

6、響應延遲主要是由於網路帶寬和伺服器處理效率引起的。應儘可能的通過一些技巧來隱藏和減少玩家的響應延遲。但不是所有的最新消息都能立刻發送出去(或接收處理到),因此,要在伺服器端採用優先隊列來減少重要消息的響應時間。延遲也會由客戶端產生,如收到消息後的對消息的處理速度。

7、 伺服器負載,除了升級硬體設備外,可以通過一些方式來提高伺服器負載。

a) 保證足夠的網路帶寬。

b) 分散式運算,合理的集群式架構。

c) 遊戲策劃從遊戲內容上避免設計高並發,高消耗的遊戲行為。

8、從伺服器的可伸縮性,穩定性和高效率方面來考慮,要試著避免所有事情都在一個地方處理,盡量讓系統分散式運行,但是過多的劃分功能到不同的進程/機器上運行,又會帶來數據的大量同步的問題。因此可以將遊戲對象的處理主要劃分為與位置無關和有關兩種。像公會,玩家信息,物品信息,組隊,拍賣等等這類與位置無關的但是佔用CPU資源較少的處理可以儘可能的放在一個進程中,避免進程間對象同步,而像NPC,尋路,AOI運算,戰鬥處理等與位置有關的,處理過程中特別關心對象坐標位置的、運算量特別大的,但是進程間對象同步較少的,都可以單獨劃分成多個進程。

每類進程服務的功能盡量單一。負責路由的就盡量只負責網路包轉發,而不再承擔其他繁重的任務,負責遊戲處理的就盡量讓網路包流向簡單。


推薦閱讀:

釣魚的時候你在想啥?
為什麼要做好事不留名?
蛻變來自於思考和感悟人生

TAG:設計 | 遊戲 | 伺服器 | 思考 | 架構 | 遊戲伺服器 | 伺服器架構 | 架構設計 | 一些 |