長連線服務被廣泛應用在訊息提醒、即時通訊、推送、直播彈幕、遊戲等場景。本篇文章將介紹雲開發資料庫的長連線服務 - 實時資料推送,使用它來構建更生動的小程式。
通過雲開發資料庫的實時資料推送能力,小程式端可實時監聽資料庫變更,即它支援根據開發者給定的查詢語句進行監聽,每當查詢語句的結果發生變化時,小程式端就會收到包含更新內容的推送,並對實時資料變化做出響應。
具體示例如下圖:客戶端1修改資料且符合監聽條件,當資料庫收到變更時,會將客戶端1的變更內容推送到其它客戶端。
使用實時資料推送有如下優勢:
零開發使用實時資料推送無需通過編寫服務端**來自建完整服務,降低了開發成本和開發者的使用門檻,可以將精力聚焦在核心業務的設計與開發上。
免鑑權零維護
使用實時資料推送無需維護基礎設施、安全管理等問題,降低維護成本。
大家都聽過網上段子說哪有什麼歲月靜好,只是有人替你負重前行。我們剛才了解了實時資料推送的零開發、零維護、免鑑權等天然優勢,那麼這些能力歲月靜好的背後是誰替它們負重前行呢?讓我們來揭開實時資料推送技術架構的神秘面紗。
請求從小程式到接入層經過的是websocket協議,再到安全校驗層進行許可權驗證。安全校驗提供簡單的acl標記,也支援高階的資料庫安全規則語法實現精細化訪問許可權控制,可以根據業務實際情況進行選擇。對於路由層以及監聽推送層,將從可用性、可靠性和效能方面來進行介紹。
對於服務首當其衝是可用性。首先是異常節點自動剔除來確保在部分節點出現問題時,服務正常可用。實時資料推送路由層通過tars的熔斷和自動剔除機制來遮蔽掉異常節點。監聽推送層使用etcd實時心跳檢測,2秒上報心跳、6秒檢測到異常,立即執行相關處理邏輯來實現異常節點自動剔除。其次通過一致性雜湊方案提公升效能、保證可用性。每次長輪詢請求都有queryid,請求從路由層到監聽推送層的對應關係由一致性雜湊生成演算法,使得監聽推送層負載均衡。最後還有相同條件對應相同的queryid來提高效能。
從小程式到實時資料推送服務是長輪詢且無狀態,為業務可靠提供保駕護航。事件自增id可以保證收到推送事件是有序的。此外,對事件進行了本地和redis的兩級快取來確保資料安全。支援客戶端掉線3分鐘,事件不丟失,斷線重連後仍能正常按序收到事件。
實時資料推送服務的效能方面,我們做了一些優化工作:
使用樹的資料結構來儲存watch條件作為索引,對監聽條件匹配索引演算法進行優化。
對於變更事件的匹配,採用多協程併發流水線:匹配事件、推送事件、快取事件。
當短時間內有多條符合監聽條件的事件產生時,多個事件將會在合併後再推送到客戶端。減少了多次推送事件的請求網路耗時,效能提公升明顯。
實時資料推送可以應用到許多實際業務場景中,如即時通訊、狀態同步以及團隊協作等方面。無論是小程式或小遊戲都可以使用雲資料庫的實時資料推送來實現相關場景的實際業務功能。
1. 即時通訊
(1)小程式:直播聊天室、彈幕等
(2)小遊戲:區服聊天、房間聊天、私信功能、動態訊息等
成語偷菜小遊戲就是乙個經典的即時通訊客戶案例,它利用實時資料推送實現了偷菜的動態訊息提醒。
2. 狀態同步
(1)小程式:聊天提示狀態好友正在輸入、好友1v1問答pk等
(2)小遊戲:五子棋等
下圖是使用實時資料推送實現的五子棋小遊戲,推送服務主要用於同步黑白兩手棋子的狀態。開發五子棋的帶原始碼教程可以看這裡:專案概述
3. 團隊協作
(2)專案管理協作
小程式雲開發 資料庫
注意 使用資料庫首先需要初始化一下 const db wx.cloud.database 一套增刪改查帶走 db.collection todos add success function res 我們先來看看如何獲取乙個記錄的資料,假設我們已有乙個 id 為todo identifiant ale...
微信小程式雲開發使用mysql資料庫
第一步建立乙個nodejs雲函式 第二步 按照下面的 編寫通用sql執行雲函式 雲函式入口檔案 const cloud require wx server sdk const mysql require mysql2 promise cloud.init 雲函式入口函式 exports.main a...
微信小程式雲開發 資料庫操作
cloud true,一般可以有兩個環境 在需要使用資料庫的js檔案中,初始化資料庫 const db wx.cloud.database 或 const testdb wx.cloud.database 在資料庫中插入資料 db.collection test add success res 在資...