使用雲開發資料庫構建更生動的小程式

長連接服務被廣泛應用在消息提醒、即時通訊、推送、直播彈幕、遊戲等場景。本篇文章將介紹雲開發資料庫的長連接服務 – 實時數據推送,使用它來構建更生動的小程式。

什麼是實時數據推送

通過雲開發資料庫的實時數據推送能力,小程式端可實時監聽資料庫變更,即它支援根據開發者給定的查詢語句進行監聽,每當查詢語句的結果發生變化時,小程式端就會收到包含更新內容的推送,並對實時數據變化做出響應。

具體示例如下圖:客戶端1修改數據且符合監聽條件,當資料庫收到變更時,會將客戶端1的變更內容推送到其它客戶端。

img

提供哪些能力來幫助開發者構建小程式

自建長連接服務,需要設計繁雜的系統架構,並且有大量的開發工作,使得開發成本較高。當長連接服務開發完成投入使用後,將不可避免的會帶來額外的維護工作。對於基礎設施、服務安全等維護也需要耗費大量的時間成本和人力成本。此時,開發者可以進行小程式的實際開發工作。接入微信鑒權體系來獲取用戶登錄態、使用微信開放介面等,基於長連接服務來實現具體的業務邏輯。不了解雲開發的同學可以查看產品文檔

使用實時數據推送有如下優勢:

  1. 零開發

使用實時數據推送無需通過編寫服務端程式碼來自建完整服務,降低了開發成本和開發者的使用門檻,可以將精力聚焦在核心業務的設計與開發上。

  1. 免鑒權

使用實時數據推送無需接入微信鑒權體系,天然集成了原生微信能力,與微信的登錄無縫整合,開箱即用,免鑒權獲取微信用戶資訊、使用微信開放介面。減少了開發者對鑒權功能的開發和維護工作。

  1. 零維護

使用實時數據推送無需維護基礎設施、安全管理等問題,降低維護成本。

整體架構

大家都聽過網上段子說哪有什麼歲月靜好,只是有人替你負重前行。我們剛才了解了實時數據推送的零開發、零維護、免鑒權等天然優勢,那麼這些能力歲月靜好的背後是誰替它們負重前行呢?讓我們來揭開實時數據推送技術架構的神秘面紗。

img

請求從小程式到接入層經過的是WebSocket協議,再到安全校驗層進行許可權驗證。安全校驗提供簡單的ACL標記,也支援高級的資料庫安全規則語法實現精細化訪問許可權控制,可以根據業務實際情況進行選擇。對於路由層以及監聽推送層,將從可用性、可靠性和性能方面來進行介紹。

可用性

對於服務首當其衝是可用性。首先是異常節點自動剔除來確保在部分節點出現問題時,服務正常可用。實時數據推送路由層通過Tars的熔斷和自動剔除機制來屏蔽掉異常節點。監聽推送層使用ETCD實時心跳檢測,2秒上報心跳、6秒檢測到異常,立即執行相關處理邏輯來實現異常節點自動剔除。其次通過一致性哈希方案提升性能、保證可用性。每次長輪詢請求都有QueryID,請求從路由層到監聽推送層的對應關係由一致性哈希生成演算法,使得監聽推送層負載均衡。最後還有相同條件對應相同的QueryID來提高性能。

可靠性

從小程式到實時數據推送服務是長輪詢且無狀態,為業務可靠提供保駕護航。事件自增ID可以保證收到推送事件是有序的。此外,對事件進行了本地和Redis的兩級快取來確保數據安全。支援客戶端掉線3分鐘,事件不丟失,斷線重連後仍能正常按序收到事件。

高性能

實時數據推送服務的性能方面,我們做了一些優化工作:

  1. 使用樹的數據結構來保存watch條件作為索引,對監聽條件匹配索引演算法進行優化。
  2. 對於變更事件的匹配,採用多協程並發流水線:匹配事件、推送事件、快取事件。
  3. 當短時間內有多條符合監聽條件的事件產生時,多個事件將會在合併後再推送到客戶端。減少了多次推送事件的請求網路耗時,性能提升明顯。

簡單易用的API

實時數據推送提供了便捷的API供使用。開發者可根據實際場景,按指定集合、查詢條件、排序方式、限制返回數量等來實現業務邏輯。更詳細的說明可參考微信開放文檔 – 雲開發實時數據推送

img

豐富的應用場景

實時數據推送可以應用到許多實際業務場景中,如即時通訊、狀態同步以及團隊協作等方面。無論是小程式或小遊戲都可以使用雲資料庫的實時數據推送來實現相關場景的實際業務功能。

1. 即時通訊

(1)小程式:直播聊天室、彈幕等

(2)小遊戲:區服聊天、房間聊天、私信功能、動態消息等

成語偷菜小遊戲就是一個經典的即時通訊客戶案例,它利用實時數據推送實現了偷菜的動態消息提醒。

img

下圖是在線聊天室Demo演示,可在微信開發者工具中開通雲開發體驗。

img

2. 狀態同步

(1)小程式:聊天提示狀態好友正在輸入、好友1V1問答PK等

(2)小遊戲:五子棋等

微信讀書每日一答小程式的問答PK環節也使用到了實時數據推送,在對答遊戲中即時同步雙方答題的倒計時、分數、結果等狀態。

img

下圖是使用實時數據推送實現的五子棋小遊戲,推送服務主要用於同步黑白兩手棋子的狀態。開發五子棋的帶源碼教程可以看這裡://club.cloudbase.net/2019-09-03-share-gomoku/#_1-項目概述

img

3. 團隊協作

(1)在線共享文檔

(2)項目管理協作

結語

以上是給大家分享的內容,希望能幫助到各位開發者們更好地應用實時數據推送,為小程式錦上添花。最後,歡迎關注云開發公眾號,不定時推送最新功能以及雲開發實戰高品質技術文章。

本分享課程影片可以在這裡查看://cloud.tencent.com/developer/salon/live-1234

雲開發(CloudBase)是雲端一體化的後端雲服務,採用 serverless 架構,免去了移動應用構建中繁瑣的伺服器搭建和運維。同時雲開發提供的靜態託管、命令行工具(CLI)、Flutter SDK 等能力極大的降低了應用開發的門檻。使用雲開發可以快速構建完整的小程式/小遊戲、H5、Web、移動 App 等應用。