我有一个由数百名用户使用的应用程序。用户可以互相开始私聊。 每个用户都有自己的唯一ID和自己的静态通道ID。
例如:
userId 1的私有频道ID称为: app-private-1
userId 2的私有频道ID称为: app-private-2
userId 200的私有频道ID称为: app-private-200
等等....
每个用户订阅自己的私人频道ID以获取私人消息,并且还知道所有其他用户私有频道ID的列表,以便向他们发布私人消息。
例如:
当用户标识1想要与用户标识2通话时:
- userId 1在 app-private-2 频道上发布消息
- 订阅 app-private-2 的userId 2收到消息
- userId 2在 app-private-1 频道上向userId 1发回消息。
问题是我如何按时间顺序获取对话历史记录,以谁对谁说,以便向用户呈现(我的应用程序中也有历史记录部分)。
我无法使用PubNub的历史记录功能,因为它只提供了一个频道的历史记录,我将失去谁对谁说的背景。
此外,如果我将消息保存在我的数据库中,那么在一方订阅频道组而另一方只订阅其中一个频道的场景中管理并赢得解决问题将是一件复杂的事情。
任何想法???
答案 0 :(得分:1)
Channel topology是您需要在应用设计中尽早做出的决定。
您使用的策略使得在两个用户之间进行对话非常困难。为了简化这一过程,您应该为每个用户到用户的私人聊天创建一个唯一的频道,并仅使用用户的私人频道进行通知:例如,您在频道abc上收到了一条消息/邀请。
您需要做什么才能获得两个用户的历史记录。频道并仅从这两个用户中挑选消息。如果您没有将用户ID存储在消息有效负载中,则无法知道。
此外,如果您从客户端应用程序中提取两个频道的历史记录,则用户将看到其他用户发布的所有消息,假设用户提取历史记录具有对其他用户的读取权限。私人渠道,但那会很糟糕。
因此,您需要调用您的服务器(更好地实现PubNub Function Endpoint来执行此操作,这样您就不必访问服务器)来提取两个频道的历史记录并筛选出用户的相关消息 - 用户对话。
如果它是您的选项,PubNub ChatEngine will会删除大部分设计和实现细节,使用许多插件(所有开源)来处理您需要的大量聊天功能。