【问题标题】:How to handle seen/unseen chat messages in React/Firebase chat app? [closed]如何在 React/Firebase 聊天应用中处理可见/不可见的聊天消息? [关闭]
【发布时间】:2018-07-01 11:54:45
【问题描述】:

我正在尝试使用 React 和 Firebase 实时数据库在一对一聊天应用中处理可见和不可见的消息状态。

我是否可以在数据库中存储每条发送消息,seen: false 值,并且当接收方挂载组件(消息)时,再次向数据库发出请求并将“seen”的值更改为“true”?

是否有太多的数据库请求会成为问题?

【问题讨论】:

    标签: javascript reactjs firebase firebase-realtime-database


    【解决方案1】:

    将每个发送消息存储在数据库中是否是一个好习惯:false 值,当接收方安装组件(消息)时,再次向数据库发出请求并将“seen”的值更改为“真的”?

    我认为您不需要为每条消息都这样做。

    假设您有 User1 和 User2 进行私人对话。

    User1 发送两条消息:

    Id: 1 Message: "hello"
    Id: 2 Message: "how are you"
    

    User2 然后查看消息 - 然后发送到服务器:

    User: 2 ChatID: abc LastViewedMessage: 2
    

    User1 返回消息,并从服务器接收 User2 的 lastViewedMessage id。

    我认为没有理由将其存储在“逐条消息”的基础上 - 除非您特别希望该功能仅将某些消息标记为已查看。

    您还可以存储消息的时间戳,以及“最后查看时间”而不是消息 ID。

    【讨论】:

    • 您可能想要跟踪单个消息状态的唯一原因是用户是否承认已看到每个单独的消息。但大多数聊天应用程序只是通过存储该消息的 ID/时间戳来跟踪用户看到的最后一条消息。
    • 如果用户 1 发送 5 条消息并且用户 2 全部阅读了它们,我应该如何将所有已读消息的状态更改为“已看到”?每条消息是否还需要具有真/假可见值?
    • 忘记每条消息的真/假概念。无论对话的消息存储在何处,您都希望在每个用户的基础上包括他们看到的最后一条消息。所以逻辑将是 user2 从发送的 5 个中看到 (last-message-id)。
    • 是的,我明白这一点,但在我的 UI 中,所有消息都已看到/未看到状态,我的问题是,如果我只知道最后一个 ?我应该使用状态吗? :)
    • 是的 - 为此使用状态是有意义的。假设您只处理 1-1 对话,您可以将 lastSeenMessage 存储在您的状态中,如果您正在处理组消息,您将需要一个对象映射用户名:lastSeenMessage。为了在单个消息上实际显示“已看到消息”图标,您必须具有检查消息是否已被看到的逻辑(消息 id
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 2021-11-13
    相关资源
    最近更新 更多