【问题标题】:way to delete beginning of chat删除聊天开头的方法
【发布时间】:2019-01-15 16:06:48
【问题描述】:

我想使用 Firebase 实时数据库创建一个聊天应用程序,让许多人可以同时聊天。所有消息都应该存储在那里:

->1
   ->user
   ->message

->2
   ->user
   ->message
...

但如果消息数量过多(例如 200 条),则应删除最后 10 条。

所以我尝试过(但显然这不是最好的解决方案)如下: 您可以让每部手机都执行此操作,如下所示:

myReference.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                if(dataSnapshot.getChildrenCount() > 200){
                    //Here would be the code to delete it
                }
            }

            @Override
            public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }

            @Override
            public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

            }

            @Override
            public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

【问题讨论】:

  • 您是否正在寻找一种“更好”的方法来做到这一点,那么这是您的问题吗?
  • 如果您正在寻找关于此的讨论,搜索词之一是“缓存替换”。
  • @EdNorman 是的,这就是我要找的东西
  • 如果您考虑在某个时候尝试使用Cloud Firestore,您可以在此处找到有关如何创建完整且实用的Firestore Chat App 的教程。
  • Alex Mamo:问题是你用 Kotlin 编码

标签: android firebase firebase-realtime-database chat


【解决方案1】:

欢迎来到 Stack Overflow!

从功能上讲,您让客户负责管理消息的方法可能会奏效,但正如您所怀疑的那样,这并不是最佳解决方案。一方面,这意味着客户端必须被授权删除/修改所有消息,无论是哪个用户发布的(毕竟最早的消息可能是由任何用户发布的)。即使不知道您的确切用例,我也怀疑您是否希望允许一个用户删除其他人发布的消息。

相反,您描述的功能听起来应该是服务器而不是客户端的责任。

为此,您可以利用 Firebase 的 Cloud Functions(特别是通过 Realtime Database triggers,最有可能),它应该允许您在服务器上有效地运行您描述的相同“onChildAdded”代码。 这样,您只需要授权服务器修改所有消息,客户端不必参与。

(注意:虽然从您的架构中看起来不是这样,但如果您实际上的意思是您希望每个用户只保留 200 条最新消息,那么授权就不是那么重要了。尽管如此,将这种责任放在服务器端可能是一个好主意,如果只是因为它允许您随时更改逻辑,而不必向您的客户端部署新版本。一般来说,这种“数据维护”从根本上更适合作为服务器的责任。)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-06
  • 1970-01-01
  • 1970-01-01
  • 2012-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多