微信《小程序·云》實(shí)時(shí)數(shù)據(jù)推送支持實(shí)時(shí)推送變更數(shù)據(jù)的能力
微信《小程序·云》實(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ù)的能力
介紹
云開(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)景,此處是一些示例:
聊天/即時(shí)通信:小游戲內(nèi)聊天、大廳廣播、區(qū)服廣播等;企業(yè)內(nèi)部小程序中的即時(shí)通信能力等
多人小游戲:使用狀態(tài)同步的小游戲,如棋牌類(lèi)等回合制游戲
協(xié)作工具:如在線協(xié)作文檔、團(tuán)隊(duì)任務(wù)管理等
實(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ī)查看該文章