一、前言
《碼神聯(lián)盟》是一款為技術(shù)人做的開源情懷游戲,每一種編程語言都是一位英雄??蛻舳撕头?wù)端均使用C#開發(fā),客戶端使用Unity3D引擎,數(shù)據(jù)庫使用MySQL。這個(gè)MOBA類游戲是筆者在學(xué)習(xí)時(shí)期和客戶端美術(shù)策劃的小伙伴一起做的游戲,筆者主要負(fù)責(zé)游戲服務(wù)端開發(fā),客戶端也參與了一部分,同時(shí)也是這個(gè)項(xiàng)目的發(fā)起和負(fù)責(zé)人。這次主要分享這款游戲的服務(wù)端相關(guān)的設(shè)計(jì)與實(shí)現(xiàn),從整體的架構(gòu)設(shè)計(jì),到服務(wù)器網(wǎng)絡(luò)通信底層的搭建,通信協(xié)議、模型定制,再到游戲邏輯的分層架構(gòu)實(shí)現(xiàn)。同時(shí)這篇博客也沉淀了筆者在游戲公司實(shí)踐五個(gè)月后對(duì)游戲架構(gòu)與設(shè)計(jì)的重新審視與思考。
這款游戲自去年完成后筆者曾多次想寫篇博客來分享,也曾多次停筆,只因總覺得靈感還不夠積淀還不夠思考還不夠,現(xiàn)在終于可以跨過這一步和大家分享,希望可以帶來的是干貨與誠意滿滿。由于目前關(guān)于游戲服務(wù)端相關(guān)的介紹文章少之又少,而為數(shù)不多的幾篇也都是站在游戲服務(wù)端發(fā)展歷史和架構(gòu)的角度上進(jìn)行分享,很少涉及具體的實(shí)現(xiàn),這篇文章我將嘗試多從實(shí)現(xiàn)的層面上加以介紹,所附的代碼均有詳盡注釋,篇幅較長,可以關(guān)注收藏后再看。學(xué)習(xí)時(shí)期做的項(xiàng)目可能無法達(dá)到工業(yè)級(jí),參考了github上開源的C#網(wǎng)絡(luò)框架,筆者在和小伙伴做這款游戲時(shí)農(nóng)藥還沒有現(xiàn)在這般火。 : )
二、服務(wù)器架構(gòu)
上圖為這款游戲的服務(wù)器架構(gòu)和主要邏輯流程圖,筆者將游戲的代碼實(shí)現(xiàn)分為三個(gè)主要模塊:Protocol通信協(xié)議、NetFrame服務(wù)器網(wǎng)絡(luò)通信底層的搭建以及LOLServer游戲的具體邏輯分層架構(gòu)實(shí)現(xiàn),下面將針對(duì)每個(gè)模塊進(jìn)行分別介紹。
三、通信協(xié)議
先從最簡單也最基本的通信協(xié)議部分說起,我們可以看到這部分代碼主要分為xxxProtocol、xxxDTO和xxxModel、以及xxxData四種類型,讓我們來對(duì)它們的作用一探究竟。
1.Protocol協(xié)議