現代的電子遊戲,不管是端遊還是手遊,網路遊戲還是單機遊戲,或多或少都會需要一些網路功能。從驗證正版,到登入註冊,再到多人互動,實時對戰,都需要伺服器端的支援。
遊戲伺服器端,是一個長期執行的程式,還要服務於多個不定時,不定點的網路請求。致臻資料來和小夥伴們講講,
一個遊戲伺服器從遊戲邏輯方面可以分為幾個模組?
註冊和登入
網路協議
資料庫
玩法邏輯
其他通用模組
註冊和登入
這點和網站後臺開發有點不同,因為遊戲帳戶的註冊都是由第三方平臺提供SDK的,遊戲開發過程中只要開發登入邏輯即可。遊戲開發後續決定使用哪個運營平臺的時候才會去考慮接收平臺提供的SDK。登入流程可以參考以下這個時序圖:
網路協議
網路協議在這裡不是指TCP或HTTP這些,或者在這之上的應用層協議。這裡的網路協議是用於遊戲中的客戶端和伺服器交流的。其中用的最多的就是Google的
協議緩衝區
了,也有直接用
JSON
或者
MessagePack
的。
資料庫
早期的遊戲伺服器是沒有使用資料庫的,玩家的資料直接存檔案的,一個玩家一個數據檔案。
現代的遊戲伺服器都配備了資料庫,是因為遊戲越來越複雜,資料量也越來越多,而且採用資料庫也方便對資料的管理和備份。
資料庫的選取一般跟遊戲專案無關,跟開發者的習慣和經驗有關。市面用的遊戲用到的資料庫大多是下面這幾種:
MySQL
MongoDB
Redis
資料庫在遊戲伺服器中的作用主要是落地玩家和玩法相關的資料,遊戲開發中並不會依賴於資料庫是關係型資料庫還是非關係型的資料。一般建議採用MongoDB作為遊戲資料庫,因為在遊戲開發過程中用到的資料結構用的最多的就是dict型別,跟MongoDB的資料結構(採用的是
BSON
)類似。而且版本交替的過程中,不像SQL一樣需要去修改表結構。用作為記憶體資料庫,實際開發過程中都是結合MySQL來使用的比較多。
除了上面介紹的這些資料庫,還需要了解下記憶體快取(也有稱為記憶體資料庫的)這個概念。這樣的玩家登入成功後,玩家的資料是要快取到記憶體中的,方便快速對資料的修改。線後也不會立即清除快取,方便短時間內重登可以快速讀取到玩家的資料。
玩法邏輯模組
下面是遊戲開發中常見的玩法模組,一般的遊戲都會包含這些玩法。可能不同的遊戲,玩法名字會有所不同。
揹包系統
裝備系統
英雄系統
任務系統
推圖副本
戰鬥系統
活動管理
內幣商店
充值(外幣商店)
單人競技場
多人競技場
公會系統
好友系統
聊天系統
郵件系統
新手指引
紅點管理
其他通用模組
下面這些模組是輔助開發上面介紹的玩法邏輯模組用的,例如聊天需要用到敏感詞檢測,好友或者公會搜尋會使用到模糊搜尋。
定時器
事件分發
離線訊息本身
批處理數量
敏感詞檢測
模糊搜尋
遊戲日誌系統
運營日誌系統
工具類模組
工具類模組在遊戲開發中也是必不可少的,下面列出了常用的一些工具:
Excel配置導表工具
通用指令
測試機器人
伺服器打包部署工具
最常見的就是Excel配置導表工具了,是用作將配置配置的Excel表格轉換成程式碼中能方便使用的資料結構。諸如Python的字典結構,Lua的表結構等等。
GM指令主要是用來做玩法測試的,或者新建一個了一個賬號,不用從頭開始練級,可以直接用指令修改等級和分發道具。
測試機器人主要是在伺服器開發過程中使用的,因為在開發的過程中,客戶端和服務端只是先商定了互動協議。在客戶端還沒有製作完需求功能的時候需要使用測試機器人來測試自己的程式碼邏輯,例如
Postman
這種測試介面的工具。測試機器人還有另外一個用途就是模擬正常玩家來壓測伺服器。
伺服器打包部署工具也是必要的,一般就是打包和加密遊戲伺服器程式碼的指令碼。插入一鍵部署的指令碼可以更方便運維他們更換的部署伺服器。
遊戲後臺相關模組
後臺一般是運營團隊開發的。下面添加了幾個跟遊戲伺服器有關聯的後臺模組:
公告系統
郵件系統
活動系統
禮包系統
運營日誌
公告一般有兩種,一種是用於停服維護的時候在登入介面顯示的公告,一種是用於遊戲中滾動顯示的公告。根據遊戲型別決定需求的,有些遊戲沒有滾屏公告的。
郵件系統是用於客服的全服郵件或者單人郵件給玩家用的,遊戲伺服器提供對應的介面給後臺發郵件就行。
活動系統是用於運營商配置伺服器活動開放時間用的。禮包系統是用於配置禮包兌換碼的。運營日誌是用於檢視遊戲中輸出的打點日誌的,做資料統計和分析用的。
遊戲伺服器引擎skynet介紹
skynet是一個輕量級的為線上遊戲伺服器打造的框架。如何使用可以參考官方的
wiki
,後續課程的示例都是基於這套框架上實現的,可以把它比作於web開發框架裡的
Openresty
或者
燒瓶
等等。
天網伺服器引擎的特點:
開源且作者持續維護
Actor
模式
多執行緒
多程序,內建
cluster
最大化
更多關於skynet的資料可以閱讀下
雲風的部落格
,裡面有介紹skynet從出生開始的相關歷史和疑難雜症。
skynet 開發環境搭建
下載引擎
開啟桌面上的Xfce終端,先建立好工程目錄:
cd
Code
mkdir
server
cd
server
下載引擎需要用到git,把skynet程式碼克隆下來。
git
clone
https:
//github。com/cloudwu/skynet。git
完成後的工程目錄結構這樣的:
編譯
進入到skynet目錄,執行
make linux
進行編譯操作:
執行演示
編譯成功之後,執行
。/skynet examples/config
啟動伺服器:
執行效果如下:
大功告成!一個開發環境就部署好了,
關於
遊戲伺服器的配置和環境
有任何的問題,都可以私信
,
同時再為大家分享一家伺服器供應商
致臻資料(zhizhenyun.com.cn)
,他家的伺服器挺不錯的,不管是效能還是服務都很好,推薦嘗試,有月付測試,伺服器也有獨立的控制面板,很方便,有任何需要指導和測評也歡迎給
致臻資料
留言哦!