2015-12-08 27 views
0

我們正在使用nodejs firebase sdk在片狀Internet連接上將本地更新推送到物聯網板上的數據集。這個連接損壞了很多數據包。本地寫入是否按照與生成相同的順序落實到Firebase

現在假設UpdateA被推送,然後UpdateB更新爲firebase(使用set()操作)。由於數據包丟失,UpdateA無法將其發送到Firebase服務器,但UpdateB會生成此消息。

在這種情況下會發生什麼?將firebase提交UpdateB和中繼到所有連接的客戶端,然後當它得到UpdateA時,它會做同樣的事情嗎?或者,Firebase服務器是否確保所有寫入都按照與本地服務器上發生的順序相同的順序提交,並按相同的順序中繼它們?

注:UpdateA和UpdateB發生在同一臺服務器

這裏上有更多的細節:

我使用火力地堡JS SDK在物聯網設備上的服務的NodeJS。該設備具有片狀互聯網連接,可以在沒有警告的情況下關閉電源。成千上萬的這些設備將被部署,他們必須在它們之間同步某些數據集(用戶數字錢包)。由於這種情況,我正在使用mongodb實現本地脫機持久緩存。錢包的所有更新首先在數據庫中保存,然後推送到firebase。現在我按照更新的順序將所有更新連續推送到Firebase。隨着設置操作的回調將觸發,我將記錄上次成功完整寫入操作的更新時間戳。現在,如果設備關閉並在某段時間後打開,則可以繼續將更新時間的本地更新推送到Firebase。

但是,只有當firebase保證我寫操作的順序與它們將提交給firebase服務器的順序相同時,該邏輯才起作用,即以相同順序也會觸發設置操作的回調。

回答

3

火力地堡這裏

工程師見event guarantees

從單個客戶端寫總是會寫入服務器和播出到有序的其他用戶。

如果您使用的是Firebase SDK,並且與Firebase服務器的連接丟失,則SDK將保留仍需發送的本地寫入操作隊列。當與服務器的連接恢復後,Firebase客戶端會按照正確的順序發送掛起的寫入操作。

因此,在您的情況下,UpdateA將在該隊列中並在連接恢復時發送到服務器。

但是,如果您在寫入數據之間存在依賴關係,請考慮使用事務。這樣,您的set()操作可以用「給定屬性Y的這個值X,將其設置爲值Z」來指定。

+0

Firebase sdk是否會同步發送本地寫入操作,即只有在UpdateA通過Firebase服務器確認後纔會中繼UpdateB? – Kartik

+0

注意UpdateA和updateB適用於不同的對象 – Kartik

+0

Firebase客戶端(所有這些都假設您使用其中一個Firebase SDK)與服務器保持開放連接。所有請求都會經過相同的連接。請注意,如果您指定更多的內容,比如您的客戶端的外觀以及您想要完成的內容,回答問題會更容易。解釋Firebase內部內容也很有趣,但對於StackOverflow來說有點廣泛(可能偏離主題)。 –

相關問題