android - 最后在聊天应用程序中看到的替代实现

标签 android firebase sockets flutter websocket

我将用附图描述我的用例,以及我能做的一切来澄清,以便我们可以提出更好的想法......

总体思路:

  • 使用 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/

相关文章:

sockets - 随后调用Actor Freeze计划

c - IMAP 服务器不会响应

node.js - 尝试运行 socket.io 示例时出现跨源请求被阻止错误

android - Titanium 使用什么解释器或编译器

firebase - 一段时间后删除 Firebase 匿名用户

android - Observable 运行在主线程上的 onNext 中接收到的 Runnables,项目之间存在延迟

python-3.x - 如何从 Firebase 存储下载文件

java - 如何更新 Firebase JSON 节点中的特定字段

java - Sip Servlet 不发送邀请请求

android - gps 时间与设备时间