-2

我正在尝试使用 deepstream.io 实现真正的聊天。在线许多教程确实处理用户之间共享的单个聊天室,但问题是,如果一个用户删除一条消息,那么它会在所有用户上删除。在普通的聊天应用程序中,每个用户都有自己的收件箱,当用户发布一条消息时,它会在发送者和接收者的收件箱中重复。

所以我想出了这个。

  1. 使用一个全局侦听器来侦听所有正在发送的消息,然后将这些消息写入数据库。这意味着我正在使用事件侦听器。这种方法的问题是扩展性,因为只有一个服务器一直在侦听和处理所有消息,更大的问题是如果服务器侦听关闭,这意味着消息不会被持久化。

  2. 使用深流列表和记录。这一个变得非常复杂,我必须使用两个列表?我的列表和收件人列表,订阅我的任何更改,当我写消息时,这意味着我必须向两个列表写入相同的消息。这也意味着,我必须在客户端访问两个收件箱,如果最后一条消息被更改,我也必须更新两条记录。所以我只允许在收件人列表上写,但不能删除,因为那个列表不是我的。我不知道这一点,但它会失败吗?

也许我缺少一些东西。有没有人使用 deepstream.io 成功实现了带有收件箱和私人消息的完整聊天应用程序?

4

1 回答 1

1

删除要求肯定会让这有点棘手,因为您现在谈论的是在用户之间镜像不同的数据集,但是有一些解决方案。

(使用列表和记录)如果您的聊天只是 1 对 1,当用户删除一条消息时,您在该记录上设置一个标志,指示用户已将其删除。然后,使用您的 Valve 权限,如果用户已删除消息,您将不允许他们看到该消息。这将需要一些应用程序逻辑,但这是一种非常干净的方法。您的 Valve 权限可能如下所示

 chat/$userA-$userB:
    read: data.deletedBy !== user.id && (user.id === userA || user.id === userB)

您也可以从列表中删除记录,但是您最终会遇到您之前描述的情况。

于 2017-08-09T10:29:30.283 回答