为了练习在大型应用程序中使用Firebase,我正在制作一个具有多个聊天室的Firebase应用程序,类似于Firechat。
理论上可以有数百万个聊天室,每个聊天室都有数百万条信息。
我希望能够显示一个聊天室名称的列表,包括一些关于每个聊天室的元数据,比如它的参与者数量。
从编码的角度来看,最简单的方法是加载所有聊天室,但这可能是大量的数据。
我的解决方案是有一个Chat数组和一个ChatInfo数组,前者包含所有聊天消息,后者包含关于每个聊天的元数据。
我的问题是:如何更新一个数组中的一个项,并确保另一个数组中的相应项也被更新,而不依赖于客户机?。
我目前的解决办法是:
var chatData = {room_name: "Test Room"}
var chat = Chat.ref.push(chatData);
var chatMeta = ChatMeta.ref.push(chatData);
chat.update({chat_meta_id: chatMeta.key});
chatMeta.update({chat_id: chat.key});这个很管用。然而,我觉得太依赖客户端了。
例如:如果客户端的Firebase连接在创建Chat之后而在创建ChatMeta之前死亡怎么办?当然,Firebase的速度很快,但是依赖前端代码来同步后端的东西感觉很糟糕。
一种解决方案是让所有“写”请求通过我控制的后端服务器,然后转到Firebase。但是整个“没有后端!”对于Firebase来说,事情是一个巨大的卖点,我想知道这是否可以避免。
在我看来,应该有某种方法对所有不同的Chat项进行“浅”查询,这样就没有必要保留一个ChatMeta数据的运行列表,或者在Firebase的末尾设置某种规则,每当Chat被更新时就更新ChatMeta。然而,这两种情况似乎都不存在。
谢谢!
发布于 2016-10-18 14:50:26
通过使用云函数,您可以避免过度依赖客户端和拥有受控的后端服务器。
在本例中,您将创建一个HTTP TRIGGER函数,并将您的room_name从客户端推送到它。云函数将执行您的需求并返回ChatMeta对象。
https://stackoverflow.com/questions/40105693
复制相似问题