天天看點

《從零開始搭建遊戲伺服器》架構和工具分析

一、前言:

        在正式開始搭建架構和編寫代碼之前,我們首先需要在大腦裡建構遊戲伺服器的藍圖,主要思考幾個問題:

1.一個完整的遊戲需要劃分為幾個類型的伺服器?

2.選擇哪種或者哪些(可能同時結合多種資料庫使用)類型的資料庫?

3.使用什麼網絡通信架構和編解碼(規則)工具?

4.其他工具。

二、概述:

1.伺服器分類:

        對于性能要求較高、使用者量較多的大型遊戲類型,例如Moba或者MMO遊戲,伺服器通常根據功能劃分為:登入伺服器、遊戲(邏輯)業務伺服器、充值伺服器和日志伺服器,這種配置設定方式可以實作業務的分離和程式的解耦。

2.資料庫的選擇:

        對于遊戲開發而已,選擇MySQL作為資料存儲伺服器無疑是理智的選擇,一方面是整體相較Orcle和SQL Server更加輕量級,另一方面是已有很多成熟的封裝類庫可以使用,無需編寫太多資料庫操作代碼。

        處理這種永久性的資料存儲資料庫之外,還有另外一種用于記憶體緩沖的資料庫,具備存取效率極高,但丢失幾率相比前類伺服器要高一些,主要用于需要快速操作資料,且不造成資料庫死鎖的方案,最常用的有Redis。存儲過程大緻如下:将需要頻繁和快速操作的資料存儲在redis資料庫(記憶體緩沖),然後定時從Redis将資料回寫到mysql資料庫中。

3.網絡通信架構:

        對于Java編寫網絡通信,目前最為常用的網絡通信架構無疑就支援分布式開發伺服器的Netty這種NIO(非阻塞異步網絡通信)架構,而相應的編解碼方式,則可以考慮Google開發的ProtoBuffer,資料量小而且跨平台特性好。