一、前言:
在正式開始搭建架構和編寫代碼之前,我們首先需要在大腦裡建構遊戲伺服器的藍圖,主要思考幾個問題:
1.一個完整的遊戲需要劃分為幾個類型的伺服器?
2.選擇哪種或者哪些(可能同時結合多種資料庫使用)類型的資料庫?
3.使用什麼網絡通信架構和編解碼(規則)工具?
4.其他工具。
二、概述:
1.伺服器分類:
對于性能要求較高、使用者量較多的大型遊戲類型,例如Moba或者MMO遊戲,伺服器通常根據功能劃分為:登入伺服器、遊戲(邏輯)業務伺服器、充值伺服器和日志伺服器,這種配置設定方式可以實作業務的分離和程式的解耦。
2.資料庫的選擇:
對于遊戲開發而已,選擇MySQL作為資料存儲伺服器無疑是理智的選擇,一方面是整體相較Orcle和SQL Server更加輕量級,另一方面是已有很多成熟的封裝類庫可以使用,無需編寫太多資料庫操作代碼。
處理這種永久性的資料存儲資料庫之外,還有另外一種用于記憶體緩沖的資料庫,具備存取效率極高,但丢失幾率相比前類伺服器要高一些,主要用于需要快速操作資料,且不造成資料庫死鎖的方案,最常用的有Redis。存儲過程大緻如下:将需要頻繁和快速操作的資料存儲在redis資料庫(記憶體緩沖),然後定時從Redis将資料回寫到mysql資料庫中。
3.網絡通信架構:
對于Java編寫網絡通信,目前最為常用的網絡通信架構無疑就支援分布式開發伺服器的Netty這種NIO(非阻塞異步網絡通信)架構,而相應的編解碼方式,則可以考慮Google開發的ProtoBuffer,資料量小而且跨平台特性好。