2016-02-12 48 views
2

所以我使用的是Parse.com的AfterSave雲代碼函數來保存與特定位置有關的最新帖子的列表。這樣做的原因是獲取位置的最新帖子,而無需搜索並排列所有位置的帖子的整個列表。Firebase AfterSave功能就像Parse.com

這在Parse AfterSave中很好地完成,因爲我不必擔心客戶端執行此命令,因此它在雲中運行是有意義的。現在解析關閉了,我決定遷移到Firebase。 Firebase中是否存在平等的功能,或者我的客戶是否需要維護最近的帖子列表?

感謝

原來的問題重新解析Get latest record per field in Parse.com JS query

回答

2

目前還沒有辦法運行的火力地堡的服務器代碼。因此,您將不得不想出一個不太直接的Cloud Code到新解決方案的映射。在每個客戶端上運行功能是一種選擇,在便宜的「機器人」/服務器上運行它是另一種選擇。

我會找到這個地方之前已經涵蓋了幾個問題,他們在這裏鏈接:

有一點需要記住的是,像這樣運行服務器並不是您立即想到的「編寫服務器」的類型。其中大部分行爲更像是一個「機器人」,與您的客戶端代碼一樣,與Firebase進行交互。在這種情況下唯一的區別是它在您控制的環境上運行,以便它可以使用提升的憑據運行。

1

一些想法;其中一個你已經提到「不」,但希望包括它的完整性:

all_messages 
    message_0 
    message: blah blah 
    timestamp: the timestamp 
    message_1 
    message: blah blah 
    timestamp: the timestamp 
    message_2 
    message: blah blah 
    timestamp: the timestamp 

如果所有客戶端都觀察all_messages節點時,將增加新的消息的任何時間,客戶端將得到通知,並可以查詢通過時間戳得到最後三條消息。很簡單的解決方案

另一個想法是有一個節點只保留最後三個消息的引用,從而減少開銷和排序。

all_messages 
    message_45 
    message: blah blah 
    message_50 
    message: blah blah 
    message_51 
    message: blah blah 

last_three_messages 
    last_message_0: message_45 
    last_message_1: message_50 
    last_message_2: message_51 

當客戶端將消息寫入到all_messages節點,寫在last_three_messages節點對它的引用和洗牌舊的消息向下。

這樣,客戶端就可以觀察last_three_messages節點。

需要一點客戶端邏輯來處理將最新消息推送到last_message_0插槽,然後將其他消息洗掉,但只需要幾行代碼,而且開銷很小。

+0

這實質上就是我想要的雲代碼而不是客戶端 – rex

+0

Firebase不提供這種服務器端邏輯。然而,這是一個非常低的帶寬,可以輕鬆添加到客戶端的最小代碼選項。 – Jay