如何在 deepstream.io 上实现聊天?

How to implement chat on deepstream.io?

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

所以我想到了这个。

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

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

也许我遗漏了什么。是否有人使用 deepstream.io 成功实现了带有收件箱和私人消息的完整聊天应用程序?

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

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

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

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