我将用附图描述我的用例,以及我能做的一切来澄清,以便我们可以提出更好的想法......
总体思路:
使用 Firebase 的 Whatsapp 聊天应用程序 使用案例: 正如我们所知,whatsapp 的功能之一是用户最后一次看到的时间(退出应用程序、注销、丢失 wifi 连接等..) 我尝试使用:
onDisconnect,但是当失去 wifi 连接时 onDisconnect 会给出不好的结果(因为套接字延迟超时)
我现在使用的,是每个用户每 3 秒更新一次时间戳(每 3 秒更新文档),当用户失去连接时, 他将无法更新他的时间戳,对吗?因此,如果另一个用户想与该离线用户聊天,我可以向他显示该用户的最后一次查看。希望这个 这很清楚...
使用Flutter框架开发
Redux 来管理应用状态
Firebase、云 Firestore
下面的代码每三秒调度一个操作,此调度的操作将更新 firebase 中最后看到的操作...
timer = Timer.periodic(Duration(seconds: 3), (Timer t) {
// store.dispatch(updateUserOnline());
});
正如您在下图中看到的,我的数据结构显示了我如何每 3 秒更新一次该用户的最后一次查看...
如果我们有一百万用户并且这百万用户正在更新他们的用户,那么要为用户的最后一次查看获得满意的结果,此实现的成本非常昂贵 每 3 秒最后一次看到它每月会花费很多美元,因为我们正在进行写入操作,不是吗?
所以,我的另一个解决方案是实现一个到我自己的服务器的套接字连接,并让所有用户在我的服务器而不是 Firebase 服务器上监听 onDisconnect 套接字事件,这是否可以避免写入操作的巨大成本?
附加图片:here
最佳答案
Firebase 写入确实会更昂贵,因为您将发送大量写入,这显然只是为了“最后一次看到”的工作。
相反,正如您所提到的,与您自己的服务器建立套接字连接将有助于减少您进行的查询数量。即,一旦套接字与服务器断开连接,您就可以向 Firebase 发送写入操作。 “每 3 秒 vs 仅当用户断开连接时”。
另外(不是您要求的),如果您要设置自己的套接字服务器,那么它也会在以下情况下有所帮助:
- 键入事件(当其他人键入消息时我们收到的指示)
- 更快地了解对方是否在线/离线(由于套接字)
关于android - 最后在聊天应用程序中看到的替代实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63424699/