如何在deepstream.io?

时间:2017-08-08 16:05:21

标签: deepstream.io

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

所以我想出了这个。

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

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

  3. 也许有些东西我不见了。有没有人成功实现了带收件箱的完整聊天应用程序,以及使用deepstream.io的私人消息?

1 个答案:

答案 0 :(得分:1)

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

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

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

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