多用户聊天 (MUC) 移动应用程序的最佳方法

Multi User chat (MUC) Best Approach for Mobile Application

我正在使用 XMPP 协议开发移动应用程序聊天,在成功实施一对一聊天后,现在处于多用户聊天 (MUC) 阶段,由于存在三种不同的 MUC 实施方法,所以很困惑传统MUCMuclightMUC Sub,现在有很多问题

除了这个还有其他方法吗?

哪种方法最适合实施?

不同方法的优缺点是什么?

哪种方法最先进?

哪种方法问题较少?

哪个最靠谱?

免责声明:我为开发 MongooseIM 的 Erlang Solutions 工作,因此开发了 MUC Light。


我会逐条解答你的问题:

Is there any approach other than this?

XMPP 有 MIX, a new (in comparison with traditional MUC) PubSub 组 communication/signalling 解决方案。我不知道有任何公开可用的实现,但 XSF 似乎达成了一些共识,使其成为传统 MUC 的正式继承者。

从实施者的角度来看,PubSub 可能是所有 XEP 中最长和最复杂的(XEP 是 XMPP 扩展协议,或者简单地说是额外的 XMPP 功能)。 MIX 建立在 PubSub 之上,它又增加了一层。我对 MIX 没有任何实际操作经验,但从相关规范的数量猜测,这不是最容易上手的解决方案。

同时,PubSub(因此成为 MIX)是移动友好的,即用户体验不会因频繁的连接中断而降低,不依赖于状态更新,易于存档,因此多设备同步可能是很简单。

Which approach is the most advanced one? Which approach is less problematic? What are pros and cons of different approaches?

Traditional MUC 定义了用户在房间中可以扮演的一组丰富的角色(访客、参与者、主持人)、权限(用户可以做什么和不能做什么)和从属关系(用户可以加入吗?某个房间?是he/she的主人?kicked/banned?)。它基于 IRC 频道的传统结构,但标准化了概念。该模型非常丰富,但同时可能有点过于复杂。传统的 MUC 严重依赖于客户端与服务器保持持续连接——断开连接需要客户端应用程序明确地重新加入它所在的任何房间。没有标准的方法来判断用户是哪个房间的成员,因此此信息必须存储在 app/device.

我不确定在 room/subscription 模型方面,传统 MUC 与 MIX 相比如何。

根据官方文档判断,MUC/Sub 是对传统 MUC 的扩展,保留了所有原始功能并添加了类似 PubSub 的消息订阅选项,而不依赖于存在交换和与服务器的持续连接.其他(大多数?所有?)交互也是可能的,同时交换存在节的必要性被解除。据我所知,它只在ejabberd中实现。

MUC Light (don't miss the developer's guide 了解一些额外的细节)采用不同的方法来启用移动设备的群组通信。它简化了传统的 MUC role/affiliation 模型(这可能是好事也可能是坏事,具体取决于您的要求),不需要与服务器的持续连接和到 join/leave 房间的存在交换(这绝对适合移动设备)并带有传统的 MUC 协议兼容层(尽管它也引入了一个新的、更简单的协议层)。在实施方面,MUC Light 房间应该比 MongooseIM 中的传统 MUC 房间更好地扩展,并且由于它们的设计更容错。

Which approaches are the best to implement?

让我们从可用的实现开始:

  • 我不知道在服务器端或客户端是否有可用的 MIX 实现
  • MUC/Sub是一个ejabberd扩展,不知道有没有client libs支持,不是官方的XEP
  • 传统 MUC 在客户端库和服务器端软件中广泛可用
  • MUC Light,坦率地说,是一个 MongooseIM 扩展,不是官方 XEP,但在 XMPPFramework (iOS) 和 Smack (Android)
  • 中有客户端支持

综上所述,"best"要实现什么取决于你的要求。如果您熟悉 PubSub 并将其用于其他情况,则 MIX 可能是可行的方法(如果可以找到/开发合适的服务器范围实现)。如果您需要丰富的聊天室模型和功能集,传统的 MUC 可以胜任,但让它在移动设备上运行会让人感觉笨拙。 MUC/Sub 可能会减轻这种感觉,但我不知道客户端库的可用性。 MUC Light 非常简单,但在某些方面可能会受到限制 罕见的情况。不过,它可能是最容易上手的。

对于简单的群聊,您可以从 Extended Stanza Addressing 开始——openfire(开箱即用)、ejabberd (mod_multicast) 和 prosody (mod_addressing 都支持它).使用扩展节寻址,您可以像在电子邮件中一样向邮件添加多个收件人。