您好,登錄后才能下訂單哦!
我是代長(zhǎng)新,來(lái)自上海享物說(shuō),主要負(fù)責(zé)游戲客戶端研發(fā)。
享物說(shuō)是一個(gè)大家可以互相贈(zèng)送物品,有趣、不花錢的社區(qū)平臺(tái)。為了創(chuàng)造更好的社區(qū)氛圍,我們決定通過(guò)小游戲來(lái)增加社區(qū)的趣味性和互動(dòng)性。 《樂(lè)享花園》是我們?cè)谛∮螒蝾I(lǐng)域的第一個(gè)實(shí)踐。這個(gè)游戲,從立項(xiàng)到做完,準(zhǔn)確的說(shuō)是客戶端做完,我們一共用了3天的時(shí)間。 但是,當(dāng)時(shí)我們種花澆花、領(lǐng)水滴任務(wù)都是通過(guò)瀏覽器緩存實(shí)現(xiàn)的,如果要上線還要等服務(wù)端人員到位,否則玩家清理一下手機(jī),自己種的花就沒了。但等我們服務(wù)端人員到位,再到游戲上線,就是幾周以后的事情了。
小游戲開發(fā)之痛:無(wú)法擺脫對(duì)服務(wù)端的依賴 相信,這也是大部分小游戲開發(fā)時(shí)會(huì)遇到的問(wèn)題 —— 功能很簡(jiǎn)單,但就是擺脫不了對(duì)服務(wù)端的依賴。如下圖:
具體來(lái)說(shuō),小游戲?qū)Ψ?wù)端的依賴主要有以下兩個(gè)方面: 1、微信接口只支持在服務(wù)端調(diào)用 這就意味著,我們必須為這些接口架設(shè)一個(gè)中轉(zhuǎn)服務(wù)器。如果沒有這個(gè)中轉(zhuǎn)服務(wù)器,我們就沒法做用戶登錄,沒法獲取用戶頭像、名稱信息,也拿不到access_token,更沒有辦法調(diào)用其他微信接口,如內(nèi)容審查。 2、游戲功能實(shí)現(xiàn)需要服務(wù)器開發(fā) 對(duì)于很多小游戲來(lái)說(shuō),我們唯一用到服務(wù)端的地方就是,儲(chǔ)存當(dāng)前的關(guān)卡進(jìn)度,展示一個(gè)世界排行,就可以了。而想要實(shí)現(xiàn)這么一個(gè)簡(jiǎn)單的需求時(shí),你會(huì)發(fā)現(xiàn),隔行如隔山。 如何用云開發(fā)解決小游戲在服務(wù)端痛點(diǎn)? 1、云函數(shù)實(shí)現(xiàn)微信接口調(diào)用
曾經(jīng),我想過(guò)繞開服務(wù)器,直接通過(guò)客戶端請(qǐng)求微信接口,結(jié)果踩了一個(gè)坑。 當(dāng)時(shí)做的是聊天功能,需要對(duì)玩家發(fā)送的消息進(jìn)行內(nèi)容審查。我看完了接口文檔,就跑過(guò)去跟服務(wù)器同學(xué)說(shuō),內(nèi)容審查我這邊全部做掉就可以,他那邊不需要做額外的處理。
等我們調(diào)通,上了體驗(yàn)版,一打開報(bào)錯(cuò),我才想起來(lái),這個(gè)接口文檔的上面,有一行小字,而且顏色是灰色的,上面寫著:此接口應(yīng)在后端服務(wù)器調(diào)用。 第一次看到這句話,還以為它只不過(guò)是一個(gè)警告,所以根本沒把它放在心上,哪知道它居然是一個(gè)error!而在這之前,我還特意做了一些我認(rèn)為比較人性化的設(shè)計(jì),比如使用這個(gè)接口需要一個(gè)密鑰,這個(gè)密鑰是有有效期的,當(dāng)密鑰過(guò)期的時(shí)候,我會(huì)把玩家發(fā)送的內(nèi)容保存起來(lái),向后端拉取新的密鑰后,再發(fā)送出去,這樣對(duì)于玩家來(lái)說(shuō),整個(gè)過(guò)程是無(wú)感知的。而現(xiàn)在則意味著所有這些都要服務(wù)器去實(shí)現(xiàn)了。 后來(lái),我通過(guò)云開發(fā)來(lái)實(shí)現(xiàn)多有接口調(diào)用,事情就簡(jiǎn)單多了。
就拿登錄來(lái)說(shuō)吧。 由于云函數(shù)具有微信天然鑒權(quán)的能力,可以直接返回openid,這一點(diǎn)對(duì)做登錄確實(shí)很方便。樂(lè)享花園需要和享物說(shuō)平臺(tái)打通小紅花積分?jǐn)?shù)據(jù),所以需要用戶的unionid信息,這一步也是在云函數(shù)中實(shí)現(xiàn)的。 還有access_token,就是剛才用到的密鑰,為什么要單獨(dú)說(shuō)這個(gè)密鑰呢?因?yàn)樗鼤?huì)用到云函數(shù)特別有意思的功能,那就是定時(shí)觸發(fā)器。由于這個(gè)密鑰是有兩個(gè)小時(shí)有效期的,我們?cè)O(shè)定一個(gè)小時(shí)間隔定時(shí)刷新,保存到數(shù)據(jù)庫(kù)中,用的時(shí)候直接從數(shù)據(jù)庫(kù)中取出來(lái)就可以了,這樣可以保證密鑰永遠(yuǎn)是不過(guò)期的。
通過(guò)云開發(fā),為微信接口準(zhǔn)備的中轉(zhuǎn)服務(wù)器就不需要了;更重要的是,服務(wù)端與微信接口分離,無(wú)需關(guān)心客戶端場(chǎng)景。不管這個(gè)客戶端,是來(lái)自h6游戲,還是來(lái)自小游戲環(huán)境,對(duì)于服務(wù)端來(lái)說(shuō),都是一樣的,再也不需要為客戶端提供這樣那樣的權(quán)限接口。
2、云函數(shù)+數(shù)據(jù)庫(kù),實(shí)現(xiàn)全局排行榜功能 正如前面提到的痛點(diǎn),小游戲開發(fā)對(duì)服務(wù)端的另一個(gè)依賴是游戲功能的實(shí)現(xiàn)。對(duì)于大部分小游戲來(lái)說(shuō),我們唯一用到服務(wù)端的地方就是:保存用戶數(shù)據(jù),展示一個(gè)世界排行榜。而如果用傳統(tǒng)服務(wù)器實(shí)現(xiàn)這些功能的話,你會(huì)發(fā)現(xiàn)需要了解的后端架構(gòu)知識(shí)非常龐大。 有次,我到服務(wù)端同學(xué)的旁邊,原本是打算diss他的,因?yàn)槲夜δ芤呀?jīng)寫完了,他還不知道在忙些什么東西。這時(shí)我看到他在做什么呢 —— 一邊寫dockfile文件,一邊寫linux命令,一邊打開Postman調(diào)試,完了后發(fā)郵件給運(yùn)維說(shuō)要執(zhí)行幾個(gè)mysql語(yǔ)句。 而所有這些都還沒有涉及到他要開發(fā)的游戲功能! 所以說(shuō),一門后端語(yǔ)言從會(huì)寫,到可以放到生產(chǎn)環(huán)境中,是兩個(gè)完全不一樣的概念。 云開發(fā)提供了數(shù)據(jù)庫(kù)、云函數(shù)、云存儲(chǔ),通過(guò)這些能力,我們完全可以取代服務(wù)器來(lái)實(shí)現(xiàn)游戲功能。 在《樂(lè)享花園》里,我們通過(guò)云開發(fā)實(shí)現(xiàn)了全民成語(yǔ)接龍這個(gè)游戲功能,并且只用了2個(gè)云函數(shù)就實(shí)現(xiàn)了我們對(duì)服務(wù)器的全部需求。這里簡(jiǎn)單介紹一下這兩個(gè)云函數(shù): 第一個(gè)云函數(shù)是用來(lái)展示世界排行榜。由于云函數(shù)拉取數(shù)據(jù)庫(kù)的條目是有限制的,最大是100條,其實(shí)這個(gè)已經(jīng)足夠滿足需求了;當(dāng)然了,你要說(shuō)我們的客戶端很牛,性能不是問(wèn)題,數(shù)據(jù)什么的先給我來(lái)個(gè)2000條,也不是不可以,這里做個(gè)處理就可以了。 另外在檢索數(shù)據(jù)庫(kù)數(shù)據(jù)時(shí),這個(gè)過(guò)程會(huì)很慢,一定要記得,在后臺(tái)添加數(shù)據(jù)庫(kù)索引,可以把這個(gè)過(guò)程理解為通過(guò)磁盤換取CPU計(jì)算。這樣速度會(huì)快很多。
第二個(gè)云函數(shù)是用來(lái)上報(bào)玩家數(shù)據(jù)。這個(gè)比較簡(jiǎn)單,一行代碼搞定。
就這樣從微信接口調(diào)用,到游戲功能開發(fā),一款不需要服務(wù)器的小游戲就全部開發(fā)完成了。 小結(jié)
其實(shí),云開發(fā)可以使用的業(yè)務(wù)場(chǎng)景,還有很多,比如, 繞過(guò)微信https域名請(qǐng)求限制 存放游戲的全局設(shè)置 保存玩家的個(gè)性化數(shù)據(jù) 。。。 作為開發(fā)者,也希望云開發(fā)未來(lái),可以提供更多的業(yè)務(wù)場(chǎng)景支持,比如 websocket,剛才說(shuō)的聊天服務(wù)器,就可以省掉了; 幀同步,實(shí)時(shí)對(duì)戰(zhàn)類游戲的實(shí)現(xiàn),就不再有壓力; 日志服務(wù),方便統(tǒng)計(jì),和排查玩家的行為,方便游戲迭代優(yōu)化; 大數(shù)據(jù)統(tǒng)計(jì)分析,可以做一些事件漏斗等等~ 這樣小游戲的研發(fā)門檻,就降得很低很低了! 如果你有關(guān)于使用云開發(fā)TCB相關(guān)的技術(shù)故事/技術(shù)實(shí)戰(zhàn)經(jīng)驗(yàn)想要跟大家分享,歡迎留言聯(lián)系我們哦!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。