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

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

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

0gn5al5szi.png

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

r1dik46j1l.png

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

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

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

b3jwtuy8gg.png

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

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

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

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

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

使用云開發(fā)數(shù)據(jù)庫的實(shí)時數(shù)據(jù)推送讓整個開發(fā)變得十分簡單,只需要一個API——watch就足以完成所有的開發(fā)。小程序可以通過watch實(shí)時監(jiān)聽數(shù)據(jù)庫變更,在收到包含更新內(nèi)容的推送后,做出相應(yīng)的實(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的時候開始監(jiān)聽,onhide的時候關(guān)閉監(jiān)聽,這樣既不浪費(fèi)監(jiān)聽數(shù),也能盡量避免計劃外的操作導(dǎo)致watch斷連后無法重新連接。

1596162757(1).png

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

5k098kgzi3 (1).gif

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

drkldi4qzu.gif

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

i6949ikgqf.gif

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

071l5fr8mt.png

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

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

原文鏈接:點(diǎn)擊前往 >
文章來源:騰訊云社區(qū)
版權(quán)說明:本文內(nèi)容來自于騰訊云社區(qū),本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個人觀點(diǎn),不代表快出海對觀點(diǎn)贊同或支持。如有侵權(quán),請聯(lián)系管理員(zzx@kchuhai.com)刪除!
個人VIP