騰訊云:如何用云開發(fā)打造“萬人同屏”高并發(fā)實(shí)時(shí)互動(dòng)小程序

來源:騰訊云社區(qū)
作者:騰訊云開發(fā)TCB
時(shí)間:2020-07-31
2700
剛剛過去的六月,國內(nèi)游戲迷們都剛剛體驗(yàn)過一場盛大的游戲發(fā)布會(huì)——2020騰訊游戲年度發(fā)布會(huì),由于疫情的原因,今年的發(fā)布會(huì)在線上舉行,不過,得益于小程序的豐富體驗(yàn),本次發(fā)布會(huì)還是得到了游戲玩家們的認(rèn)可。

剛剛過去的六月,國內(nèi)游戲迷們都剛剛體驗(yàn)過一場盛大的游戲發(fā)布會(huì)——2020騰訊游戲年度發(fā)布會(huì),由于疫情的原因,今年的發(fā)布會(huì)在線上舉行,不過,得益于小程序的豐富體驗(yàn),本次發(fā)布會(huì)還是得到了游戲玩家們的認(rèn)可。

0gn5al5szi.png

在發(fā)布會(huì)過程中,一個(gè)重要的環(huán)節(jié)就是跟隨著活動(dòng)的進(jìn)展,每個(gè)環(huán)節(jié)都會(huì)有自己的定制互動(dòng)。例如和平精英環(huán)節(jié),會(huì)有和平精英專場掉落抽獎(jiǎng)、和平精英閃現(xiàn)社區(qū)彈幕、議程也需要高亮和平精英模塊,如下圖:

r1dik46j1l.png

這就要求小程序能夠讓所有在觀看直播的游戲玩家同時(shí)看到抽獎(jiǎng)、寶盒等功能,實(shí)現(xiàn)實(shí)時(shí)交互。

此外,也會(huì)有一些場景需要做到議程高亮同一個(gè)模塊,抽獎(jiǎng)和閃現(xiàn)社區(qū)彈幕卻是不同游戲的。在對(duì)所有的功能點(diǎn)進(jìn)行分析后,我們發(fā)現(xiàn),最多需要90+開關(guān)來完成實(shí)時(shí)控制,因此,這也要求我們可以實(shí)時(shí)的對(duì)這些功能的展示進(jìn)行控制。

從小程序->微信后臺(tái)->云開發(fā)(云函數(shù))這一段公網(wǎng)鏈路是私有協(xié)議,不僅保障了安全性,而且提高了傳輸性能。

b3jwtuy8gg.png

在明確了訴求后,我們分析可能的實(shí)現(xiàn)方案:

1.接口輪詢:接口輪詢是常規(guī)操作,但在后臺(tái)需要考慮好高并發(fā)的問題的。特別是大型游戲發(fā)布會(huì),參與的游戲玩家人數(shù)會(huì)非常多,給后臺(tái)帶來的壓力是巨大的。

2.json文件輪詢——在發(fā)布系統(tǒng)更新發(fā)布包含當(dāng)前環(huán)節(jié)信息的json,小程序輪詢方式請(qǐng)求json文件。但這個(gè)方案頁面反應(yīng)不夠及時(shí),壓力也從后臺(tái)轉(zhuǎn)移到了當(dāng)天負(fù)責(zé)更新json文件的同學(xué)身上。

3.云開發(fā)數(shù)據(jù)庫的實(shí)時(shí)數(shù)據(jù)推送——小程序原生能力,開箱即用,無需管理長連,無需編寫服務(wù)端代碼,無需搭建和管理基礎(chǔ)設(shè)施,自動(dòng)收到更新推送。

綜合評(píng)估,認(rèn)為還是使用云開發(fā)數(shù)據(jù)庫的實(shí)時(shí)數(shù)據(jù)推送更好,簡單易上手,也是小程序的原生能力。調(diào)研發(fā)現(xiàn)云開發(fā)的watch給到每個(gè)用戶的最大限制連接數(shù)是5萬,而我們預(yù)估活動(dòng)當(dāng)天的DAU超過限制,因此,聯(lián)系了云開發(fā)的同事進(jìn)行擴(kuò)容,將限制提高,并進(jìn)行了壓測,確保不出問題。事實(shí)上在活動(dòng)整個(gè)過程,甚至是峰值都毫無壓力,輕松扛過用戶請(qǐng)求。

使用云開發(fā)數(shù)據(jù)庫的實(shí)時(shí)數(shù)據(jù)推送讓整個(gè)開發(fā)變得十分簡單,只需要一個(gè)API——watch就足以完成所有的開發(fā)。小程序可以通過watch實(shí)時(shí)監(jiān)聽數(shù)據(jù)庫變更,在收到包含更新內(nèi)容的推送后,做出相應(yīng)的實(shí)時(shí)響應(yīng)。

1be53lyjag.png

在具體的實(shí)現(xiàn)方面,也十分簡單,可以參考我們的代碼進(jìn)行操作。

我們將相關(guān)的監(jiān)聽代碼進(jìn)行了封裝,方便在不同情況下調(diào)用。如果你有一些特定場景下才執(zhí)行操作的邏輯,可以直接在watch的onChange回調(diào)中調(diào)用進(jìn)行。

1596162728(1).png

并在合適的地方設(shè)置開始監(jiān)聽,在頁面onshow的時(shí)候開始監(jiān)聽,onhide的時(shí)候關(guān)閉監(jiān)聽,這樣既不浪費(fèi)監(jiān)聽數(shù),也能盡量避免計(jì)劃外的操作導(dǎo)致watch斷連后無法重新連接。

1596162757(1).png

通過這樣的邏輯,我們實(shí)現(xiàn)了管理員在發(fā)布會(huì)環(huán)節(jié)開始才放開彈幕互動(dòng)入口:

5k098kgzi3 (1).gif

議程有抽獎(jiǎng),才會(huì)出現(xiàn)抽獎(jiǎng)入口,并且展示的是提供當(dāng)前抽獎(jiǎng)環(huán)節(jié)獎(jiǎng)品的產(chǎn)品logo:

drkldi4qzu.gif

主持人口播“查看Spark幸運(yùn)鵝中獎(jiǎng)結(jié)果吧!”的時(shí)候,會(huì)全屏彈窗展示中獎(jiǎng)名單,充滿儀式感!

i6949ikgqf.gif

發(fā)布會(huì)或者線下項(xiàng)目必須要考慮周全,都是一次性短時(shí)間高并發(fā)活動(dòng),沒有機(jī)會(huì)給你查漏補(bǔ)缺。所以我們還給watch想了個(gè)備案,監(jiān)聽失敗(onError)的時(shí)候就用上面提到的第2個(gè)方案開始每秒輪詢同步更新的json文件,json里的數(shù)據(jù)和結(jié)構(gòu)跟watch的一樣,所以整體交互流程方面是不需要做額外修改的。結(jié)果也證明云開發(fā)數(shù)據(jù)庫的watch是非??孔V的,輪詢都沒有用上。

071l5fr8mt.png

作為承載騰訊游戲年度發(fā)布會(huì)首次線上舉辦、首次TOC、首次進(jìn)行實(shí)時(shí)互動(dòng)的小程序,它也算是良好的完成了自己的任務(wù)。

特別要感謝騰訊云和小程序提供的好用、易用、靠譜的實(shí)時(shí)數(shù)據(jù)推送能力watch,讓我們的創(chuàng)意能更好的落地

立即登錄,閱讀全文
原文鏈接:點(diǎn)擊前往 >
文章來源:騰訊云社區(qū)
版權(quán)說明:本文內(nèi)容來自于騰訊云社區(qū),本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個(gè)人觀點(diǎn),不代表快出海對(duì)觀點(diǎn)贊同或支持。如有侵權(quán),請(qǐng)聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質(zhì)服務(wù)商推薦
更多
掃碼登錄
打開掃一掃, 關(guān)注公眾號(hào)后即可登錄/注冊(cè)
加載中
二維碼已失效 請(qǐng)重試
刷新
賬號(hào)登錄/注冊(cè)
小程序
快出海小程序
公眾號(hào)
快出海公眾號(hào)
商務(wù)合作
商務(wù)合作
投稿采訪
投稿采訪
出海管家
出海管家