2016-02-12 50 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