如何用雲開發打造“萬人同屏”高併發實時互動小程式

Tencent_TCB發表於2020-07-22

剛剛過去的六月,國內遊戲迷們都剛剛體驗過一場盛大的遊戲釋出會 —— 2020 騰訊遊戲年度釋出會,由於疫情的原因,今年的釋出會線上上舉行,不過,得益於雲開發和小程式的豐富體驗,本次釋出會還是得到了遊戲玩家們的認可。

實時資料同步的問題該如何解決?

在釋出會過程中,一個重要的環節就是跟隨著活動的進展,每個環節都會有自己的定製互動。例如和平精英環節,會有和平精英專場掉落抽獎、和平精英閃現社群彈幕、議程也需要高亮和平精英模組,如下圖:

img

這就要求小程式能夠讓所有在觀看直播的遊戲玩家同時看到抽獎、寶盒等功能,實現實時互動。

此外,也會有一些場景需要做到議程高亮同一個模組,抽獎和閃現社群彈幕卻是不同遊戲的。在對所有的功能點進行分析後,我們發現,最多需要 90+ 開關來完成實時控制,因此,這也要求我們可以實時的對這些功能的展示進行控制。

實時資料同步的常見三種方案

在明確了訴求後,我們分析可能的實現方案:

  1. 介面輪詢:介面輪詢是常規操作,但在後臺需要考慮好高併發的問題的。特別是大型遊戲釋出會,參與的遊戲玩家人數會非常多,給後臺帶來的壓力是巨大的。
  2. json檔案輪詢 —— 在釋出系統更新發布包含當前環節資訊的json,小程式輪詢方式請求json檔案。但這個方案頁面反應不夠及時,壓力從也後臺轉移到了當天負責更新json檔案的同學身上。
  3. 雲開發資料庫的實時資料推送 -— 小程式原生能力,開箱即用,無需管理長連,無需編寫服務端程式碼,無需搭建和管理基礎設施,自動收到更新推送。

綜合評估,認為還是使用雲開發資料庫的實時資料推送更好,簡單易上手,也是小程式的原生能力。調研發現雲開發的 watch 給到每個使用者的最大限制連線數是5萬,而我們預估活動當天的 DAU 超過限制,因此,聯絡了雲開發的同事進行擴容,將限制提高,並進行了壓測,確保不出問題。事實上在活動整個過程,甚至是峰值都毫無壓力,輕鬆扛過使用者請求

技術文件:https://cloudbase.net

使用雲開發資料庫的實時資料推送讓整個開發變得十分簡單,只需要一個 API —— watch 就足以完成所有的開發。小程式可以通過 watch 實時監聽資料庫變更,在收到包含更新內容的推送後,做出相應的實時響應。

如何實現

在具體的實現方面,也十分簡單,你可以參考我們的程式碼進行。

我們將相關的監聽程式碼進行了封裝,方便在不同情況下呼叫。如果你有一些特定場景下才執行操作的邏輯,可以直接在 watch 的 onChange 回撥中呼叫進行。

// 監聽當前議程開關 loadAdminConfig(cb) { let that = this const db = wx.cloud.database() that.globalData.adminWatch = db.collection('adminConfig').watch({ onChange: function (result) { let adminData = result.docChanges[0].doc console.log(adminData) if(adminData.agenda_id > 108){ } }, onError: function (err) { console.error('the watch closed because of error', err) } }) }

並在合適的地方設定開始監聽,在頁面onshow的時候開始監聽,onhide的時候關閉監聽,這樣既不浪費監聽數,也能儘量避免計劃外的操作導致watch斷連後無法重新連線。

// onShow 開始監聽 onShow: function(){ app.loadAdminConfig() } // onHide 關閉監聽 onHide: function () { app.globalData.adminWatch && app.globalData.adminWatch.close().then(() => { app.globalData.adminWatch = null }) }

通過這樣的邏輯,我們實現了管理員在釋出會環節開始才放開彈幕互動入口:

16

議程有抽獎,才會出現抽獎入口,並且展示的是提供當前抽獎環節獎品的產品logo:

17

主持人口播“檢視Spark幸運鵝中獎結果吧!”的時候,會全屏彈窗展示中獎名單,充滿儀式感!

18

釋出會或者線下專案必須要考慮周全,都是一次性短時間高併發活動,沒有機會給你查漏補缺。所以我們還給watch想了個備案,監聽失敗(onError)的時候就用上面提到的第2個方案開始每秒輪詢同步更新的json檔案,json裡的資料和結構跟watch的一樣,所以整體互動流程方面是不需要做額外修改的。結果也證明雲開發資料庫的watch是非常靠譜的,輪詢都沒用到。

總結

作為承載騰訊遊戲年度釋出會首次線上舉辦、首次TOC、首次進行實時互動的小程式,它也算是良好的完成了自己的任務。

相關文章