資訊動(dòng)態(tài)

微信《小程序·云》實(shí)時(shí)數(shù)據(jù)推送支持實(shí)時(shí)推送變更數(shù)據(jù)的能力

日期:2019-09-10 作者:管理員 來(lái)源:互聯(lián)網(wǎng)

微信《小程序·云》實(shí)時(shí)數(shù)據(jù)推送支持實(shí)時(shí)推送變更數(shù)據(jù)的能力【珠海微信小程序定制開(kāi)發(fā)電話】為了進(jìn)一步提高在即時(shí)通信、實(shí)時(shí)數(shù)據(jù)更新和推送等場(chǎng)景下的開(kāi)發(fā)效率,小程序·云開(kāi)發(fā)新增實(shí)時(shí)數(shù)據(jù)推送能力。開(kāi)發(fā)者在小程序端給定查詢(xún)條件后,每當(dāng)查詢(xún)結(jié)果發(fā)生變更時(shí),小程序可收到一個(gè)更新事件,實(shí)時(shí)獲取更新內(nèi)容。實(shí)時(shí)數(shù)據(jù)推送可被廣泛地應(yīng)用于棋牌類(lèi)等回合制小游戲、在線協(xié)作文檔以及團(tuán)隊(duì)任務(wù)管理等場(chǎng)景。

微信《小程序·云》實(shí)時(shí)數(shù)據(jù)推送支持實(shí)時(shí)推送變更數(shù)據(jù)的能力

微信《小程序·云》實(shí)時(shí)數(shù)據(jù)推送支持實(shí)時(shí)推送變更數(shù)據(jù)的能力


介紹

云開(kāi)發(fā)數(shù)據(jù)庫(kù)支持實(shí)時(shí)推送變更數(shù)據(jù)的能力,給定查詢(xún)條件,每當(dāng)數(shù)據(jù)庫(kù)更新而導(dǎo)致查詢(xún)條件對(duì)應(yīng)的查詢(xún)結(jié)果發(fā)生變更時(shí),小程序可收到一個(gè)更新事件,其中可獲取更新內(nèi)容和更新后的查詢(xún)結(jié)果快照。

實(shí)時(shí)數(shù)據(jù)推送有廣泛應(yīng)用場(chǎng)景,此處是一些示例:

  1. 聊天/即時(shí)通信:小游戲內(nèi)聊天、大廳廣播、區(qū)服廣播等;企業(yè)內(nèi)部小程序中的即時(shí)通信能力等

  2. 多人小游戲:使用狀態(tài)同步的小游戲,如棋牌類(lèi)等回合制游戲

  3. 協(xié)作工具:如在線協(xié)作文檔、團(tuán)隊(duì)任務(wù)管理等

  4. 實(shí)時(shí)應(yīng)用狀態(tài)同步:以信息流為例,可以實(shí)時(shí)獲取最新文章、以及最新評(píng)論、點(diǎn)贊、通知等內(nèi)容,讓交互更順暢自然

監(jiān)聽(tīng)

調(diào)用 Collection 上的 watch 方法即可監(jiān)聽(tīng)給定查詢(xún)條件對(duì)應(yīng)的數(shù)據(jù):

const db = wx.cloud.database() const watcher = db.collection('todos').where({ team: 'our dev team' }).watch({ onChange: function(snapshot) { console.log('docs\'s changed events', snapshot.docChanges) console.log('query result snapshot after the event', snapshot.docs) console.log('is init data', snapshot.type === 'init') }, onError: function(err) { console.error('the watch closed because of error', err) } }) // ... // 等到需要關(guān)閉監(jiān)聽(tīng)的時(shí)候調(diào)用 close() 方法 watcher.close()

onChange  onError 是必傳參數(shù)。onChange 用于接收變更快照,onError 用于處理監(jiān)聽(tīng)錯(cuò)誤。如果監(jiān)聽(tīng)發(fā)起失敗或監(jiān)聽(tīng)過(guò)程中出現(xiàn)不可恢復(fù)的錯(cuò)誤,則會(huì)終止監(jiān)聽(tīng)并通過(guò) onError 拋出異常。onChange 會(huì)在第一次監(jiān)聽(tīng)初始化及后續(xù)數(shù)據(jù)變更時(shí)收到推送事件。第一次初始化時(shí)會(huì)收到的查詢(xún)條件對(duì)應(yīng)的查詢(xún)結(jié)果(此處不會(huì)有默認(rèn) 20 條上限,包含集合中所有滿(mǎn)足查詢(xún)條件的記錄),后續(xù)變更事件會(huì)包含變更內(nèi)容和變更后的查詢(xún)結(jié)果快照。

onChange 收到的 snapshot 變更快照中帶有如下字段:

字段 類(lèi)型 說(shuō)明
docChanges ChangeEvent[] 更新事件數(shù)組
docs object[] 數(shù)據(jù)快照,表示此更新事件發(fā)生后查詢(xún)語(yǔ)句對(duì)應(yīng)的查詢(xún)結(jié)果
type string 快照類(lèi)型,僅在第一次初始化數(shù)據(jù)時(shí)有值為 init
id number 變更事件 id

ChangeEvent 記錄變更事件的內(nèi)容包括:

字段 類(lèi)型 說(shuō)明
id number 更新事件 id
queueType string 列表更新類(lèi)型,表示更新事件對(duì)監(jiān)聽(tīng)列表的影響,枚舉值,定義見(jiàn) QueueType
dataType string 數(shù)據(jù)更新類(lèi)型,表示記錄的具體更新類(lèi)型,枚舉值,定義見(jiàn) DataType
docId string 更新的記錄 id
doc object 更新的完整記錄
updatedFields object 所有更新的字段及字段更新后的值,key 為更新的字段路徑,value 為字段更新后的值,僅在 update 操作時(shí)有此信息
removedFields string[] 所有被刪除的字段,僅在 update 操作時(shí)有此信息

DataType 枚舉值

枚舉值 說(shuō)明
init 初始化數(shù)據(jù)
update 記錄內(nèi)容更新,對(duì)應(yīng) update 操作
replace 記錄內(nèi)容被替換,對(duì)應(yīng) set 操作
add 記錄新增,對(duì)應(yīng) add 操作
remove 記錄被刪除,對(duì)應(yīng) remove 操作

QueueType 枚舉值

枚舉值 說(shuō)明
init 初始化列表
update 列表中的記錄內(nèi)容有更新,但列表包含的記錄不變
enqueue 記錄進(jìn)入列表
dequeue 記錄離開(kāi)列表

變更事件會(huì)細(xì)分記錄數(shù)據(jù)變更類(lèi)型 dataType 和監(jiān)聽(tīng)列表變更類(lèi)型 queueType,其可能的搭配和意義如下。

dataType queueType 說(shuō)明
init init 監(jiān)聽(tīng)開(kāi)始時(shí)的初始化數(shù)據(jù)
update update 記錄部分更新,更新后仍在查詢(xún)結(jié)果列表中
update enqueue 記錄部分更新,更新后進(jìn)入查詢(xún)結(jié)果列表
update dequeue 記錄部分更新,更新后離開(kāi)查詢(xún)結(jié)果列表
replace update 記錄被替換,更新后仍在查詢(xún)結(jié)果列表中
replace enqueue 記錄被替換,更新后進(jìn)入查詢(xún)結(jié)果列表
replace dequeue 記錄被替換,更新后離開(kāi)查詢(xún)結(jié)果列表
add enqueue 記錄是新增記錄,新增后進(jìn)入查詢(xún)結(jié)果列表
remove dequeue 記錄被刪除,離開(kāi)查詢(xún)結(jié)果列表

注意事項(xiàng)與系統(tǒng)限制

監(jiān)聽(tīng)返回的數(shù)據(jù)不受默認(rèn) 20 條限制

監(jiān)聽(tīng)返回的數(shù)據(jù)可能超過(guò) 20 條,不受小程序端默認(rèn) 20 條上限限制。

監(jiān)聽(tīng)暫只支持 where 語(yǔ)句

監(jiān)聽(tīng)暫僅支持 where 語(yǔ)句,不支持 orderBy、limit、field 等語(yǔ)句。

監(jiān)聽(tīng)記錄數(shù)限制

一次監(jiān)聽(tīng)的記錄數(shù)上限為 5000,若超出上限會(huì)拋錯(cuò)并停止監(jiān)聽(tīng)。監(jiān)聽(tīng)過(guò)大量的數(shù)據(jù)時(shí)初始化會(huì)較慢,對(duì)監(jiān)聽(tīng)效率也有影響,如果預(yù)期監(jiān)聽(tīng)發(fā)起時(shí)少于 5000,但后續(xù)有可能超過(guò) 5000,請(qǐng)注意在即將超過(guò)時(shí)重新監(jiān)聽(tīng)并保證不超過(guò) 5000。

最佳實(shí)踐

只監(jiān)聽(tīng)必要的數(shù)據(jù)

監(jiān)聽(tīng)時(shí)應(yīng)明確查詢(xún)條件,只監(jiān)聽(tīng)必須用到的數(shù)據(jù),避免監(jiān)聽(tīng)不必要的數(shù)據(jù),以此提高初次加載數(shù)據(jù)的性能以及接收數(shù)據(jù)變更的性能。

二維碼
掃二維碼手機(jī)查看該文章
當(dāng)前網(wǎng)址:http://yngytx.cn/wechat/663.html

相關(guān)資訊

?
Copyright ? 2007-2024 珠海市網(wǎng)訊互聯(lián)信息科技有限公司 yngytx.cn 版權(quán)所有
粵公網(wǎng)安備44040202000391號(hào) 粵ICP備19117377號(hào) 網(wǎng)站地圖 站點(diǎn)地圖
在線客服