一、前言:

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

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

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

3.使用什麼網路通訊框架和編解碼(規則)工具?

4.其他工具。

二、概述:

1.伺服器分類:

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

2.資料庫的選擇:

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

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

3.網路通訊框架:

        對於Java編寫網路通訊,當前最為常用的網路通訊框架無疑就支援分散式開發伺服器的Netty這種NIO(非阻塞非同步網路通訊)框架,而相應的編解碼方式,則可以考慮Google開發的ProtoBuffer,資料量小而且跨平臺特性好。