Android 上次出现在聊天应用程序中的替代实现

Android 上次出现在聊天应用程序中的替代实现,android,firebase,sockets,flutter,websocket,Android,Firebase,Sockets,Flutter,Websocket,我将用附图描述我的用例,以及我所能做的一切,以便我们能有一个更好的想法 总体思路: Whatsapp聊天应用程序与firebase 用例: 正如我们所知,whatsapp的其中一个功能是用户最后一次看到的功能(退出应用程序、注销、失去wifi连接等) 我尝试使用: onDisconnect,但onDisconnect在失去wifi连接时会产生不好的结果(因为套接字延迟将超时) 我现在使用的是,当用户失去连接时,每个用户每3秒更新一次时间戳(每3秒更新一次文档), 他将无法更新他的时间戳,对

我将用附图描述我的用例,以及我所能做的一切,以便我们能有一个更好的想法

总体思路:

  • Whatsapp聊天应用程序与firebase 用例: 正如我们所知,whatsapp的其中一个功能是用户最后一次看到的功能(退出应用程序、注销、失去wifi连接等) 我尝试使用:

  • onDisconnect,但onDisconnect在失去wifi连接时会产生不好的结果(因为套接字延迟将超时)

  • 我现在使用的是,当用户失去连接时,每个用户每3秒更新一次时间戳(每3秒更新一次文档), 他将无法更新他的时间戳,对吗?因此,如果另一个用户想要与这个离线用户聊天,我可以向他显示该用户最后一次看到的信息。希望如此 这很清楚

  • 使用颤振框架开发

  • Redux用于管理应用程序状态

  • Firebase,云firestore

下面的代码每三秒发送一次操作,此发送的操作将更新firebase中最后一次看到的操作

timer = Timer.periodic(Duration(seconds: 3), (Timer t) {
   // store.dispatch(updateUserOnline());
});
正如您可以在下图中看到的,我的数据结构显示了我是如何每3秒更新此用户最后一次看到的

如果我们有100万用户,并且这100万用户正在更新他们的应用程序,那么对于一个用户来说,要获得令人满意的结果,这种实现是非常昂贵的 最后一次看到它是每3秒一次,每月要花很多美元,因为我们正在做一个写操作,不是吗

因此,我的另一个解决方案是实现到我自己的服务器的套接字连接,并让所有用户在我的服务器上而不是在Firebase服务器上侦听onDisconnect套接字事件,这是否可以避免编写操作的巨大成本


附图:

Firebase写操作的成本确实要高一点,因为您将发送大量的写操作,这些显然只是为了“最后一次看到”的工作

相反,正如您所提到的,与您自己的服务器建立套接字连接将有助于减少查询数量。i、 e.一旦套接字与服务器断开连接,您就可以向Firebase发送写入操作。“仅当用户断开连接时,每3秒一次”

另外(不是您要求的),如果您要设置自己的套接字服务器,那么它在以下场景中也会有所帮助:

  • 键入事件(当其他人键入消息时,我们得到的指示)
  • 快速了解另一端的人是否在线/离线的方法(因为插座)