遊戲服務器架構文檔
不少同學或朋友都問過我,Java做遊戲服務器跟Java web有什麼不同,趁着這次這個遊戲差不多完工,我寫了一個服務器架構的文檔,當然,每個人都能設計不同的架構,有好的有壞的,我這裏給的只是我個人的一種設計,其中哪些設計不合理,還請多指教。由於寫文檔用的服務器上搭建的showdoc,一種免費的在線文檔系統,使用的md,於是我就直接copy到簡書來了,不過文檔中的敏感信息都處理了,遊戲名就不透露啦,服務器的ip端口,賬號密碼,更是不能透露啦。這裏就讓那些還不明白遊戲服務器的同學們,大致瞭解下服務器的架構
**服務器架構文檔
一、服務器架構圖
根據需求,可將服務器大致分爲登錄服務器、邏輯服務器、文件服務器、支付服務器、國戰服務器和聊天服務器
1.服務器間進程通信
服務器之間的進程通信使用json-rpc,json-rpc的底層爲短連接實現,通信爲json數據格式
2.遊戲服務器
服務器\屬性 | 外網ip | 內網ip | 端口 | 管理端口 |
---|---|---|---|---|
登錄服務器 | 127.0.0.1 | 127.0.0.1 | 0 | 0 |
文件服務器 | 127.0.0.1 | 127.0.0.1 | 0 | 0 |
國戰服務器 | 127.0.0.1 | 127.0.0.1 | 0 | 0 |
支付服務器 | 127.0.0.1 | 127.0.0.1 | 0 | 0 |
邏輯服務器 | 127.0.0.1 | 127.0.0.1 | 0 | 0 |
聊天服務器 | 暫無 | 暫無 | 暫無 | 暫無 |
3.Redis服務器集羣
服務器\屬性 | 外網ip | 內網ip | 端口 | 密碼 |
---|---|---|---|---|
Redis Sentinel集羣 | 127.0.0.1 | 127.0.0.1 | 0 | 無 |
Redis主服務器1 | 127.0.0.1 | 127.0.0.1 | 0 | 123456 |
Redis從服務器1 | 127.0.0.1 | 127.0.0.1 | 0 | 無 |
Redis主服務器2 | 127.0.0.1 | 127.0.0.1 | 0 | 123456 |
Redis從服務器2 | 127.0.0.1 | 127.0.0.1 | 0 | 無 |
4.Memcache服務器
服務器\屬性 | 外網ip | 內網ip | 端口 |
---|---|---|---|
Memcache | 127.0.0.1 | 127.0.0.1 | 0 |
5.MySQL服務器
服務器\屬性 | 外網代理ip | 內網ip | 外網端口 | 賬號 | 密碼 |
---|---|---|---|---|---|
MySQL | 無 | 127.0.0.1 | 0 | root | 123456 |
- 備註:開發階段所有服務器部署在同一臺物理服務器
二、邏輯服務器系統架構
其中,遊戲邏輯服務器的系統架構如下:
- 遊戲客戶端爲Cocos2d,與服務器交互採用Http通信,數據傳輸採用Json格式字符串
- 服務器端的網絡層使用基於Netty實現的Http服務器
- 通過Netty接入客戶端請求,根據請求數據中的協議號,調用服務器中相對應的邏輯模塊
- 邏輯模塊處理消息,若要處理遊戲數據則調用Jedis或Hibernate處理,若觸發某事件,則調用事件處理器
- 通過Netty的ChannelHandlerContext返回處理結果
- 客戶端與服務器交互的數據通過XXTea+Base64進行加密處理
總結如下圖:
三、服務器啓動
服務器啓動順序如下:
- MySQL服務器
- Memcache服務器
- Redis Sentinel
- Redis Masters
- Redis Slaves
- 登錄服務器
- 支付服務器
- 邏輯服務器
- 文件服務器
- 聊天服務器
- 國戰服務器