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

问题描述:

我正在尝试使用deepstream.io实现真正的聊天。 在线许多教程都处理用户间共享的一个聊天室,但问题在于,如果一个用户删除了一则消息,然后在所有用户上删除该消息。在普通聊天应用程序中,当用户发送重复在发件人和收件人收件箱中的邮件时,每个用户都有自己的收件箱。如何在deepstream.io上实现聊天?

所以我想出了这个。

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

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

也许有一些我失踪了。有没有人成功实施了带收件箱的完整聊天应用程序,以及使用deepstream.io进行的私人消息传递?

+0

任何人投票的关怀说,为什么? – user3564573

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

(使用列表和记录)如果您的聊天记录只有1比1,那么当用户删除消息时,您在该记录上设置了一个标记,指示用户已将其删除。然后,使用您的阀门权限,您不允许用户在删除它时看到消息。这将需要一些应用程序逻辑,然而这是相当干净的方法。你阀权限可能看起来像什么如下

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

你也可以从列表中删除记录,但是你再结束了,你之前所描述的情况。

+0

谢谢我真的很喜欢你的解决方案。这样我就不必复制这些消息。我已经尝试过,它完美地工作, – user3564573