如何用雲開發打造“萬人同屏”高併發實時互動小程式
剛剛過去的六月,國內遊戲迷們都剛剛體驗過一場盛大的遊戲釋出會 —— 2020 騰訊遊戲年度釋出會,由於疫情的原因,今年的釋出會線上上舉行,不過,得益於雲開發和小程式的豐富體驗,本次釋出會還是得到了遊戲玩家們的認可。
實時資料同步的問題該如何解決?
在釋出會過程中,一個重要的環節就是跟隨著活動的進展,每個環節都會有自己的定製互動。例如和平精英環節,會有和平精英專場掉落抽獎、和平精英閃現社群彈幕、議程也需要高亮和平精英模組,如下圖:
這就要求小程式能夠讓所有在觀看直播的遊戲玩家同時看到抽獎、寶盒等功能,實現實時互動。
此外,也會有一些場景需要做到議程高亮同一個模組,抽獎和閃現社群彈幕卻是不同遊戲的。在對所有的功能點進行分析後,我們發現,最多需要 90+ 開關來完成實時控制,因此,這也要求我們可以實時的對這些功能的展示進行控制。
實時資料同步的常見三種方案
在明確了訴求後,我們分析可能的實現方案:
- 介面輪詢:介面輪詢是常規操作,但在後臺需要考慮好高併發的問題的。特別是大型遊戲釋出會,參與的遊戲玩家人數會非常多,給後臺帶來的壓力是巨大的。
- json檔案輪詢 —— 在釋出系統更新發布包含當前環節資訊的json,小程式輪詢方式請求json檔案。但這個方案頁面反應不夠及時,壓力從也後臺轉移到了當天負責更新json檔案的同學身上。
- 雲開發資料庫的實時資料推送 -— 小程式原生能力,開箱即用,無需管理長連,無需編寫服務端程式碼,無需搭建和管理基礎設施,自動收到更新推送。
綜合評估,認為還是使用雲開發資料庫的實時資料推送更好,簡單易上手,也是小程式的原生能力。調研發現雲開發的 watch 給到每個使用者的最大限制連線數是5萬,而我們預估活動當天的 DAU 超過限制,因此,聯絡了雲開發的同事進行擴容,將限制提高,並進行了壓測,確保不出問題。事實上在活動整個過程,甚至是峰值都毫無壓力,輕鬆扛過使用者請求。
使用雲開發資料庫的實時資料推送讓整個開發變得十分簡單,只需要一個 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
})
}
通過這樣的邏輯,我們實現了管理員在釋出會環節開始才放開彈幕互動入口:
議程有抽獎,才會出現抽獎入口,並且展示的是提供當前抽獎環節獎品的產品logo:
主持人口播“檢視Spark幸運鵝中獎結果吧!”的時候,會全屏彈窗展示中獎名單,充滿儀式感!
釋出會或者線下專案必須要考慮周全,都是一次性短時間高併發活動,沒有機會給你查漏補缺。所以我們還給watch想了個備案,監聽失敗(onError)的時候就用上面提到的第2個方案開始每秒輪詢同步更新的json檔案,json裡的資料和結構跟watch的一樣,所以整體互動流程方面是不需要做額外修改的。結果也證明雲開發資料庫的watch是非常靠譜的,輪詢都沒用到。
總結
作為承載騰訊遊戲年度釋出會首次線上舉辦、首次TOC、首次進行實時互動的小程式,它也算是良好的完成了自己的任務。
相關文章
- 優酷鴻蒙開發實踐|多屏互動開發實踐鴻蒙
- Taro + 小程式雲開發實戰
- 小程式·雲開發的雲函式路由高階玩法函式路由
- 實時雲互動如何助力教育行業發展行業
- 讓微信小程式開發如魚得水微信小程式
- 小程式·雲開發實戰 - 迷你微博
- 小程式雲開發專案實戰
- 雲原生微信小程式開發實戰微信小程式
- 實戰·使用taro+雲開發快速開發小程式
- 9小時搞定微信小程式開發-高磊-極客時間微信小程式
- 小程式雲開發初探
- Hybrid小程式混合開發之路 – 資料互動
- 微信小程式搶紅包高併發設計微信小程式
- 億級流量高併發春晚互動前端技術揭秘前端
- 小程式雲開發體驗
- 微信小程式雲開發6微信小程式
- 實戰:雲開發·實現奶茶店小程式(一)
- 商城軟體開發、開發商城小程式的好處-北京銳智互動軟體開發
- 騰訊線上教育的小程式雲開發實踐
- 移動開發即服務,騰訊雲移動開發平臺打造開發新模式移動開發模式
- 微信小程式--聊天室小程式(雲開發)微信小程式
- 小程式·雲開發 專案開發經驗分享
- 小程式雲開發之初體驗
- 小程式·雲開發初級FAQ
- 微信小程式---快速上手雲開發微信小程式
- 微信小程式學習:雲開發微信小程式
- 小程式雲開發初體驗
- 微信小程式雲開發如何上手微信小程式
- 【小程式】微信小程式開發實踐微信小程式
- Windows多屏開發小記Windows
- Elasticsearch高併發寫入優化的開源協同經歷Elasticsearch優化
- 雲開發初探 —— 更簡便的小程式開發模式模式
- [分散式][高併發]高併發架構分散式架構
- 真人大屏互動系統,打造數字互動新體驗!
- 10行程式碼實現微信小程式支付功能,使用小程式雲開發實現小程式支付功能(行程微信小程式
- 微信開發之小程式實現倒數計時
- 藉助小程式雲開發實現小程式的登陸註冊功能
- 小程式雲開發之踩到狗尾巴