W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
我們維護一個 WebSocket 連接以與 Moralis LiveQuery 服務(wù)器進行通信。 在服務(wù)器端使用時,我們使用 ws 包,在瀏覽器中使用 window.WebSocket。 我們認為在大多數(shù)情況下,沒有必要直接處理 WebSocket 連接。 因此,我們開發(fā)了一個簡單的 API,讓您專注于自己的業(yè)務(wù)邏輯。
let query = new Moralis.Query('Game');
let subscription = await query.subscribe();
你得到的訂閱實際上是一個事件發(fā)射器。 有關(guān)事件發(fā)射器的更多信息,請查看此處。 您將通過此訂閱獲得 LiveQuery 事件。 當您第一次調(diào)用 subscribe 時,我們將嘗試為您打開與 LiveQuery 服務(wù)器的 WebSocket 連接。
我們定義了幾種類型的事件,您將通過訂閱對象獲得:
subscription.on('open', () => {
console.log('subscription opened');
});
當您調(diào)用 ?query.subscribe()
? 時,我們會向 LiveQuery 服務(wù)器發(fā)送一個訂閱請求。 當我們從 LiveQuery 服務(wù)器獲得確認時,將發(fā)出此事件。
當客戶端無法維護 WebSocket 連接并與 LiveQuery 服務(wù)器斷開連接時,我們將嘗試自動重新連接 LiveQuery 服務(wù)器。 如果我們重新連接 LiveQuery 服務(wù)器并成功重新訂閱 MoralisQuery,您也會收到此事件。
subscription.on('create', (object) => {
console.log('object created');
});
當創(chuàng)建一個新的 MoralisObject 并滿足您訂閱的 MoralisQuery 時,您將收到此事件。 該對象是創(chuàng)建的 MoralisObject。
注意:在新的 Nitro 服務(wù)器上,對于自動同步的表(例如同步事件),將使用更新而不是創(chuàng)建。
subscription.on('update', (object) => {
console.log('object updated');
});
當現(xiàn)有 MoralisObject 滿足 MoralisQuery 時,您的訂閱會更新(MoralisObject 在更改前后滿足 MoralisQuery),您將收到此事件。 該對象是已更新的 MoralisObject。 它的內(nèi)容是 MoralisObject 的最新值。
subscription.on('enter', (object) => {
console.log('object entered');
});
當現(xiàn)有 MoralisObject 的舊值不滿足 MoralisQuery 但其新值滿足 MoralisQuery 時,您將收到此事件。 對象是進入 MoralisQuery 的 MoralisObject。 它的內(nèi)容是 MoralisObject 的最新值。
subscription.on('leave', (object) => {
console.log('object left');
});
當現(xiàn)有 MoralisObject 的舊值滿足 MoralisQuery 但其新值不滿足 MoralisQuery 時,您將收到此事件。 對象是離開 MoralisQuery 的 MoralisObject。 它的內(nèi)容是 MoralisObject 的最新值。
subscription.on('delete', (object) => {
console.log('object deleted');
});
當滿足 MoralisQuery 的現(xiàn)有 MoralisObject 被刪除時,您將收到此事件。 對象是被刪除的 MoralisObject。
subscription.on('close', () => {
console.log('subscription closed');
});
當客戶端失去與 LiveQuery 服務(wù)器的 WebSocket 連接并且我們無法獲得更多事件時,您將獲得此事件。
subscription.unsubscribe();
如果您想停止接收來自 MoralisQuery 的事件,您只需取消訂閱即可。 之后,您將不會從訂閱對象中獲得任何事件。
Moralis.LiveQuery.close();
使用完 LiveQuery 后,您可以調(diào)用 ?Moralis.LiveQuery.close()
?。 此函數(shù)將關(guān)閉與 LiveQuery 服務(wù)器的 WebSocket 連接,取消自動重新連接,并取消訂閱所有基于它的訂閱。 如果在此之后調(diào)用 ?query.subscribe()
?,我們將創(chuàng)建一個到 LiveQuery 服務(wù)器的新 WebSocket 連接。
Moralis.liveQueryServerURL = 'ws://XXXX'
大多數(shù)情況下,您不需要手動設(shè)置它。 如果您設(shè)置了 ?Moralis.serverURL
?,我們將嘗試提取主機名并使用 ws://hostname 作為默認的 liveQueryServerURL。 但是,如果您想定義自己的 liveQueryServerURL 或使用不同的協(xié)議(例如 wss),則應(yīng)自行設(shè)置。
我們公開了三個事件來幫助您監(jiān)控 WebSocket 連接的狀態(tài):
Moralis.LiveQuery.on('open', () => {
console.log('socket connection established');
});
當我們與 LiveQuery 服務(wù)器建立 WebSocket 連接時,您將收到此事件。
Moralis.LiveQuery.on('close', () => {
console.log('socket connection closed');
});
當我們失去與 LiveQuery 服務(wù)器的 WebSocket 連接時,您將收到此事件。
Moralis.LiveQuery.on('error', (error) => {
console.log(error);
});
當發(fā)生網(wǎng)絡(luò)錯誤或 LiveQuery 服務(wù)器錯誤時,您將收到此事件。
由于整個 LiveQuery 功能依賴于與 LiveQuery 服務(wù)器的 WebSocket 連接,因此我們總是嘗試保持打開的 WebSocket 連接。
因此,當與 LiveQuery 服務(wù)器的連接丟失時,我們會嘗試自動重新連接。 我們在引擎蓋下做指數(shù)回退。
但是,如果 WebSocket 連接由于 ?Moralis.LiveQuery.close()
? 或 ?client.close()
? 而關(guān)閉,我們將取消自動重新連接。
當您訂閱 MoralisQuery 時,我們會將 ?sessionToken
?發(fā)送到 LiveQuery 服務(wù)器。 對于標準 API,我們默認使用當前用戶的 ?sessionToken
?。 對于高級 API,您可以在訂閱 MoralisQuery 時使用任何 ?sessionToken
?。 需要注意的重要一點是,當您注銷或您使用的 ?sessionToken
?無效時,您應(yīng)該取消訂閱并重新訂閱 MoralisQuery。 否則,您可能會遇到安全問題,因為您會收到不應(yīng)該發(fā)送給您的事件。
let query1 = new Moralis.Query('test_subscription');
let query2 = new Moralis.Query('test_subscription');
query1.equalTo('a', undefined)
query2.equalTo('a', '10')
mainQuery = Moralis.Query.or(query1, query2);
let subscription = await mainQuery.subscribe();
subscription.on('create', (object) => {
console.log('object created', object);
});
subscription.on('update', (object) => {
console.log('object updated', object);
});
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: