More  

收藏本站

電腦請使用 Ctrl + D 加入最愛
手機請使用 收藏
關閉

小編的世界 優質文選 主機

揭秘遊戲服務器,不看後悔!


字體大小:
2021年6月16日 -
:   
 

香菜聊遊戲

Author By:某位大佬

前言

《摩爾莊園》前段時間上線, 持續超出市場預期,相信也有不錯的收益。遊戲好玩,所有玩家看到了前端,但是做一款遊戲,離不開後台遊戲服務器的支持,服務器都要做什麼,服務器的架構是什麼,需要哪些技術,一系列的問題有沒有思考過?下面講下作為做服務器開發中需要做的事。

1、常見遊戲模塊

遊戲玩法

遊戲開發中常見的玩法模塊,一般的遊戲都會包含這些玩法

新手引導、任務系統、背包系統、裝備系統、副本、戰鬥系統、活動、商店、充值,競技場,公會系統,好友系統、聊天系統、郵件系統、紅點系統等等

通用模塊

定時job,處理一些定期活動重置,排名發獎勵等

登錄,頂號,離線,斷線重連處理

敏感詞檢測,版署需要

日志系統,記錄玩家行為日志,獎勵日志等

功能開啟關閉,有時候遊戲出問題後(比如刷獎勵)指定功能需要及時關閉

掉落,獎勵隨機規則

防沉迷系統,主要是未成年人保護規則

聊天監控,

錯誤上報機制

道具卡兌換,邀請碼

夏令時問題處理

不停服熱更線上代碼

緊急下架運營活動

合服

運營後台管理系統

發布下架活動

發布公告

發送郵件

遊戲資源凍結

賬號封號,解封,禁言

查詢當前在線人數

2、開發語言與項目構建發布

一般遊戲服務器使用C++,nodejs,photon, JAVA等語言開發,端遊戲一般選擇C++,因為端遊對服務器的性能要求相對比較高一些,語言各有利弊,C++效率高,但是掌握起來難些,JAVA易於掌握,開發效率高,目前對於追求快速上線率的頁遊和手遊來說,JAVA成了一個不錯的選擇,下面主要以JAVA項目來講述服務器各模塊之間如何交互,如何分工合作。項目采用maven框架構建,簡化了項目依賴管理, jar包便於與持續集成工具(jenkins)整合一鍵打包發布svn,一般地,遊戲服務器的架構劃分如下三層:網絡接入層、遊戲邏輯層、數據存儲層

網絡接入層

通信方面使用Netty框架,主要封裝各種物理底層通訊機制,讓應用程序員關注業務邏輯。協議數據使用protobuff, Protobuf有更高的消息壓縮率,時間效率和空間效率都有很大的提升,支持多語言,跨平台

數據緩存以及存儲

市面用的遊戲用到的數據庫大多是下面這幾種:

MySQL,MongoDB, Redis

遊戲服務器都配備了數據庫,是因為遊戲越來越複雜,數據量也越來越多,而且采用數據庫也方便對數據的管理和備份。mysql主要存儲一些遊戲中玩家數據,redis主要存儲一些跨服數據,比如跨服排行榜數據實時排名,或者數據的緩存。

遊戲中玩家數據需要及時響應,及時反饋,一般遊戲中絕大部分的數據是有緩存的,遊戲中玩家產生的數據變化,一般先修改玩家緩存數據,一定時間後,緩存數據定時批量寫入數據庫,長期使用不到的緩存將會被清理,減少內存空間使用。

遊戲邏輯層

服務器各類模塊介紹 :

服務器架構 :

注:platform 和多個遊戲服相連接。

流程說明:

登陸流程
:玩家登陸時首先連接web服,進行登陸,驗證成功後,會將玩家登陸的token 放到Gate服。然後玩家連接Gate服登陸到Game服。

戰鬥流程
:玩家在Game服發起戰鬥,比如匹配戰鬥,則在Game服上匹配,然後送入Fighter 戰鬥服進行戰鬥,此時所有的戰鬥消息從Gate服直接路由到Fighter服,戰鬥結果發送給Game服,然後進行發獎等邏輯

玩家移動流程
:玩家移動消息同步給Scene服,Scene服每一幀同步給所有的玩家

3、JAVA遊戲服務器,需要掌握的技術

Java基礎知識

JavaNIO編程

多線程編程,並發集合的掌握,遊戲中有很多並發事件,安全性尤為重要

熱更新,內存,CPU性能分析

Netty,Mina網絡框架精通一種

Redis,memcache,MongoDB等單用或者組合使用

SQL語言,數據庫:如mysql

數據庫操作,比如mybatis,Hibernate

spring,springMvc主要用於http協議的WEB服務器

tomcat,Nginx

Linux常用的基本命令及shell腳本(服務器發布,啟動關閉)

4、總結

遊戲服務器因為需要面向所有的玩家,所以對服務器的穩定性要求比較高,不能總是出現問題《需要在開發中細心。

策劃的設計經常天馬行空,所以也要考慮到服務器的功能擴展性,爭取在盡量少寫代碼的情況下完成功能。

服務端程序的開發速度很重要,需要考慮模塊的通用性,功能的擴展性,盡量的降低bug可能性,合理設計。

服務端同學任重道遠,需要不斷的學習和積累經驗,才能做好遊戲的支撐。

加油吧,希望各位同學做出自己喜歡的遊戲