将MQTT协议评估为聊天服务,以满足可能具有有限连接的客户端的1-1,1-n,n-n通信。
目前的设计适用于每个客户默认根据其唯一ID
订阅频道e.g. 'users/9932947'. Messages (payload: JSON) published to this channel would contain a new randomly generated topic, e.g. 'conversations/2938475', for the conversation to continue.
这将允许1-1,1-n和n-n通信。并且,这意味着发送的第一条消息将启动对话'。通过初始化新消息,可以使用相同的收件人列表启动新的会话。 (我假设插件可以处理中列出的多个收件人 有效载荷,以及处理1-1,1-n,n-n对话的逻辑 发生客户端)
然后我在pub / sub范例中面对现实,如果用户1234发送 向用户5678发送消息,但用户5678尚未订阅,则是 消息丢失了,在某些情况下会很糟糕。使用 '保留' flag不是理想的,因为可能会发送多条消息。
因此,一旦订阅者收到消息,逻辑流将指示收件人订阅有效负载中标识的新主题。我可能打破了发布/订阅范例,或者在涉及动态主题和消息过期时我可能会遗漏一些内容。
知道我的代理/队列系统可能会从我的联系人数据库消耗,是否可以为用户自动创建持久性会话,并且那些用户可以订阅这些随机生成的主题/对话?这是一个糟糕的设计吗?有关缩放的任何问题吗?