消息库

时间:2015-12-01 03:53:23

标签: swift parse-platform

方案是:某些用户向某些人发送消息

我正在考虑为一个CLASS创建一个特定对话的ROW。在哪里,ROW包含诸如发送者姓名","接收者"等信息。并且我有列(PFRelation)将该特定行连接到另一个类,其中从用户到接收器的所有消息都将被保存(反之亦然)。

因此,每次用户开始新会话时都会执行此操作。

此前景的好处:

隐私,因为正在保存的唯一控件仅来自用户和接收器组。

这个预期的缺点:

我们都知道解析只能免费提供30reqs / s,这意味着1分钟= 1800 reqs。所以每次我创建一个新类来跟踪convo。我使用了很多请求吗?

在实现此信使库之前,我正在寻找理想方式的建议和想法。

1 个答案:

答案 0 :(得分:1)

听起来你已经想出了一些类似于我以前使用的东西,在Parse作为后端的应用程序中实现消息传递。考虑用户界面如何查询数据也很重要。一般而言,确保读取数据非常简单快捷是最重要的。对于大多数社交应用,Facebook's engineering team on Haystack中的以下引用特别相关。

  

Haystack是我们设计用于分享照片的对象商店   Facebook一次写入数据,经常阅读,永不修改,以及   很少删除。

这里的关键信息是 一次编写,经常阅读,从未修改,很少删除 。无论您决定采用何种方法,在设计解决方案时都要牢记这一点。我在使用Parse实现消息传递系统之前使用的方法如下所述。

概述

Message类的每一行(对象)对应于已发布的单个文本,图片或视频消息。每个Message都属于GroupGroup可以小到2 User(私密对话),也可以根据需要增长。

RecentMessage类是我提出的解决方案,可以快速轻松地填充UI。每个RecentMessage对象对应于给定Group可能属于的每个UserUser中的每个Group都有自己的RecentMessage对象,该对象使用beforeSave/afterSave cloud code triggers保持最新。每当创建新的Message时,在afterSave触发器中我们都希望更新属于RecentMessage的所有Group个对象。

您的应用中很可能会有一个表格,其中会显示用户所属的所有会话。这可以通过查询所有用户的RecentMessage对象轻松实现,这些对象已包含在选择时加载其余消息所需的所有Group信息,并且还包含最新消息& #39;要在表格中显示的数据(因此名称)。或者,RecentMessage可以包含指向最新Message的指针,但我决定复制数据是一种有益的权衡,因为它简化了将来的查询。

消息

  • 组(指向消息所属的组的指针)
  • user(指向创建它的用户的指针)
  • text(string)
  • 图片(可选文件)
  • 视频(可选文件)

RecentMessage

  • 组(组指针)
  • 用户(用户指针)
  • lastMessage(包含最新Message的文字的字符串)
  • lastUser(指向发布最新User的{​​{1}}的指针)

  • members(用户指针数组)
  • 您想要的姓名或其他信息

安全/隐私

在您的应用中创建消息传递功能时,安全和隐私是必不可少的。请务必仔细阅读Parse Engineering安全博客文章,并花些时间将其全部放入:Part IPart IIPart IIIPart IV,{{3 }}

在我们的案例中,最重要的是描述ACL的第III部分,或Part VMessage个对象将具有与其所有成员Group对应的ACL。 User个对象将对其所有者RecentMessage具有受限制的读/写ACL。 User个对象将继承它们所属的Message的ACL,允许所有Group成员读取。我建议在afterSave触发器中禁用写入ACL,以便不能修改消息。

一般性评论

关于Parse和请求限制,您需要接受这样一个事实,即您将很快超过30 req / s免费套餐。作为一般经验法则,专注于构建最佳用户体验比关注过度可扩展性要好得多。总的来说,可伸缩性问题很少发挥作用,因为大多数应用程序都失败了。并不是说这是令人沮丧的 - 只是要记住一些事情,以防止你因为时间成本而陷入过度工程的陷阱:)