slack如何存储未读消息计数?

时间:2016-08-30 11:45:38

标签: javascript design-patterns chat slack

我正在构建聊天应用程序,并且我正在尝试识别用于指示未读消息的状态体系结构。

我的州目前包含一个邮件列表。在渲染时,我通过对话对它们进行分组,这样我就可以呈现收件人列表,并为所选收件人呈现消息。

最简单的方法是在状态中也存储lastRead {recipient: lastReadTimestamp}哈希值。在渲染时,计算时间戳大于存储的lastRead时间戳的每个对话中的消息数,以获取未读消息的数量。选择收件人后,将该收件人的lastRead时间戳设置为最新邮件的时间戳。

问题在于,当你离开时,有15条以上的消息进入 - 有些超出了视口,你必须滚动才能看到它们。选择该收件人后,它会将lastRead时间戳标记为最新邮件,实际上将整个会话标记为"阅读"即使上面有消息已经被人看见了。

相反,我希望功能更像Slack&s。 in-viewInteractionObserver可以检测到邮件何时实际进入视口。

slack screenshot

但是我会在州内存放什么?每条未读消息的ID?如果是这样,当我刷新并且我的应用程序收到所有消息时,它是如何知道它们中的任何一个被读取的?我可以存储每个读取消息的ID,但这听起来很笨拙。

有没有人为此看到过良好的设计模式?

0 个答案:

没有答案