LollipopGo:登錄服務(wù)器

游戲服務(wù)器開發(fā)過程中钧敞,整個(gè)服務(wù)器的架構(gòu)設(shè)計(jì)對于項(xiàng)目的影響是至關(guān)重要的,其中包括登錄流程麸粮,消息機(jī)制流程溉苛,消息加密流程 內(nèi)部服務(wù)器消息跳轉(zhuǎn),定時(shí)任務(wù)等弄诲。centos系統(tǒng)為例愚战,給大家梳理下游戲架構(gòu)的基礎(chǔ)設(shè)計(jì)思想。

如何設(shè)計(jì)

1. 登錄服務(wù)器通信方式:采用http或者h(yuǎn)ttps與游戲客戶端進(jìn)行信
2. 校驗(yàn)數(shù)據(jù)齐遵,游戲客戶端發(fā)過來的數(shù)據(jù)是否正確寂玲,采用DBserver(數(shù)據(jù)庫反向代理)校驗(yàn),異步通信方式RPC
3. 數(shù)據(jù)通信格式:采用json梗摇,返回?cái)?shù)據(jù)也同樣是json
4. 每個(gè)功能采用的都是路由方式訪問拓哟,彼此隔離

流程分析

1. 支持不同登錄的方式,例如:第三方登錄(微信伶授、微博断序、QQ等)流纹,手機(jī)號注冊,游客登錄
2. 每個(gè)玩家登錄成功后违诗,會隨機(jī)生成一個(gè)token捧颅,及代理服務(wù)器的地址(反向代理)
3. 玩家通過2步驟獲取的數(shù)據(jù),主動(dòng)連接代理服務(wù)器的地址较雕,發(fā)送tocken校驗(yàn)數(shù)據(jù)的正確
4. 校驗(yàn)成功碉哑,返回玩家的數(shù)據(jù),同時(shí)進(jìn)入游戲主界面,后端記錄玩家此刻的游戲的狀態(tài)
5. 以上只是粗略的簡述流程,實(shí)際開發(fā)中要復(fù)雜一些

實(shí)例代碼

// 主函數(shù)
func main() {
    conf.InitConfig()
    DB.DBInit()
    http.HandleFunc("/"+conf.GetConfig().Server.URL+"/client/login", Login)     // 登錄流程
    http.HandleFunc("/"+conf.GetConfig().Server.URL+"/client/register", Login)  // 注冊流程
    http.HandleFunc("/"+conf.GetConfig().Server.URL+"/server/list", servers)    // 獲取區(qū)域列表
    http.HandleFunc("/"+conf.GetConfig().Server.URL+"/server/login", GameToken) // 服務(wù)器校驗(yàn)虹蓄,token數(shù)據(jù)流程
    err := http.ListenAndServe(conf.GetConfig().Server.HTTPAddr, nil)
    if err != nil {
        glog.Errorln("http.ListenAndServe()函數(shù)執(zhí)行錯(cuò)誤,錯(cuò)誤為:%v\n", err)
        return
    }
}

// 登錄操作
func Login(w http.ResponseWriter, req *http.Request) {
    w.Header().Set("Accss-Control-Allow-Origin", "*")
    req.Header.Add("content-type", "charset=UTF-8")
    // 獲取賬號密碼
    fmt.Println("req:",req)
    if req.Method == "GET" {
        if accountable := req.FormValue("AccountName"); accountable != "" {
            if accountPw := req.FormValue("AccountPw"); accountPw != "" {
                // 獲取玩家數(shù)據(jù)
                data := twlib_proto.C2SUserLogin{
                    AccountName: accountable,
                    AccountPw:   util.MD5_LollipopGO(accountPw),
                }
                // 發(fā)送給DB sever 去驗(yàn)證數(shù)據(jù)
                ulcerate := DbLogin(&data)
                fmt.Println(ulcerate)
                // token生成的機(jī)制 -- 19位時(shí)間戳 md5
                stricken := util.GetNowtimeMD5_LollipopGO() // 時(shí)間19位時(shí)間
                GMapUser[stricken] = ulcerate
                rcdata := &msg.LoginData{
                    Token:      stricken,
                    Url:        ulcerate.LatestArea, // 默認(rèn)新區(qū),或者近期登錄
                    ServerList: ulcerate.ServerList, // 30個(gè)區(qū)數(shù)據(jù)(分頁是沒30區(qū)一頁)
                }
                // 確保登錄正確
                if ulcerate.RoleUid > 0 {
                    rcdata.AesKey = conf.GetConfig().Server.AesKey
                }
                // 返回客戶端
                sendData, _ := json.Marshal(rcdata)
                replyJson(w, sendData)
                return
            }
        }
        replyJson(w, "parameter  is wrong!")
    }
}
    

注意事項(xiàng)

  1. 登錄服務(wù)器tocken生成邏輯
以LollipopGo分布式游戲架構(gòu)為例:
1. 采用底層庫:LollipopGo/util
2. 調(diào)用方式:util.Md5_LollipopGO(動(dòng)態(tài)的19位時(shí)間)
3. 19位時(shí)間生成函數(shù):util.GetNowUnixNano_LollipopGo()
  1. 登錄服務(wù)器的數(shù)據(jù)庫設(shè)計(jì)
1. 測試前期登錄服務(wù)器的數(shù)據(jù)庫反向代理可以使用游戲邏輯架構(gòu)中的服務(wù)
2. 預(yù)發(fā)布及上線期間需要分離,也就是登錄服務(wù)器的數(shù)據(jù)和游戲邏輯數(shù)據(jù)不同贮尖,主要是考慮到性能及安全性
3. 登錄服務(wù)器的數(shù)據(jù)庫反向代理服務(wù)器建議增加redis緩存玩家數(shù)據(jù),對應(yīng)的玩家同時(shí)TTL可以設(shè)置
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載趁怔,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者湿硝。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市润努,隨后出現(xiàn)的幾起案子关斜,更是在濱河造成了極大的恐慌,老刑警劉巖铺浇,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件痢畜,死亡現(xiàn)場離奇詭異,居然都是意外死亡鳍侣,警方通過查閱死者的電腦和手機(jī)丁稀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來倚聚,“玉大人线衫,你說我怎么就攤上這事』笳郏” “怎么了授账?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長唬复。 經(jīng)常有香客問我矗积,道長,這世上最難降的妖魔是什么敞咧? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮辜腺,結(jié)果婚禮上休建,老公的妹妹穿的比我還像新娘乍恐。我一直安慰自己,他們只是感情好测砂,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布茵烈。 她就那樣靜靜地躺著,像睡著了一般砌些。 火紅的嫁衣襯著肌膚如雪呜投。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天存璃,我揣著相機(jī)與錄音仑荐,去河邊找鬼。 笑死纵东,一個(gè)胖子當(dāng)著我的面吹牛粘招,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播偎球,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼洒扎,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了衰絮?” 一聲冷哼從身側(cè)響起袍冷,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎猫牡,沒想到半個(gè)月后难裆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡镊掖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年乃戈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片亩进。...
    茶點(diǎn)故事閱讀 39,981評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡症虑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出归薛,到底是詐尸還是另有隱情谍憔,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布主籍,位于F島的核電站习贫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏千元。R本人自食惡果不足惜苫昌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望幸海。 院中可真熱鬧祟身,春花似錦奥务、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至婉陷,卻和暖如春帚称,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背秽澳。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工闯睹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人肝集。 一個(gè)月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓瞻坝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親杏瞻。 傳聞我的和親對象是個(gè)殘疾皇子所刀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評論 2 355