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

Posted

技术标签:

【中文标题】多用户聊天 (MUC) 移动应用程序的最佳方法【英文标题】:Multi User chat (MUC) Best Approach for Mobile Application 【发布时间】:2017-08-05 09:15:59 【问题描述】:

我正在开发一个使用 XMPP 协议的移动应用程序聊天,在成功实现一对一聊天后,现在处于多用户聊天 (MUC) 阶段,由于有三种不同的 MUC 实现方法可用,因此存在很多混乱Traditional MUC, Muclight , MUC Sub , 现在很多问题

除此之外还有其他方法吗?

哪种方法最好实施?

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

哪种方法最先进?

哪种方法问题较少?

哪个最可靠?

【问题讨论】:

【参考方案1】:

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


我将尝试逐点解决您的问题:

除此之外还有什么办法吗?

MIX,一个新的(与传统 MUC 相比)PubSub 基于 XMPP 的组通信/信令解决方案。我不知道有任何公开可用的实现,但 XSF 似乎达成了一些共识,使其成为传统 MUC 的正式继承者。

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

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

哪种方法是最先进的?哪种方法问题较少?不同方法的优缺点是什么?

Traditional MUC 定义了用户可以在房间中扮演的一组丰富的角色(访客、参与者、主持人)、特权(用户可以做什么和不能做什么)和从属关系(用户可以加入某个房间吗?是他/她的所有者?踢/禁止?)。它基于 IRC 频道的常规结构,但将概念标准化。该模型非常丰富,但同时可能有点过于复杂。传统的 MUC 严重依赖于客户端与服务器的持续连接 - 断开连接需要客户端应用程序显式重新加入它所在的任何房间。没有标准的方法来告诉用户是哪些房间的成员,所以这些信息必须存储在应用程序/设备中。

我不确定在房间/订阅模式方面传统 MUC 与 MIX 相比如何。

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

MUC Light(不要错过developer's guide 了解更多详细信息)采用不同的方法为移动设备启用群组通信。它简化了传统的 MUC 角色/从属关系模型(这可能是好事也可能是坏事,取决于您的要求),不需要与服务器的持续连接和状态交换来加入/离开房间(这绝对有利于移动设备)并带有传统的 MUC 协议兼容层(尽管它还引入了一个新的、更简单的协议层)。在实施方面,MUC Light 房间应该比 MongooseIM 中的传统 MUC 房间更好地扩展,并且由于它们的设计更具容错性。

哪些方法最好实施?

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

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

总而言之,什么是“最佳”实施取决于您的要求。如果您熟悉 PubSub 并将其用于其他情况,则 MIX 可能是要走的路(如果可以找到/开发合适的服务器范围的实现)。如果您需要丰富的聊天室模型和功能集,传统的 MUC 就可以完成这项工作,但让它在移动设备上运行会感觉很笨拙。 MUC/Sub 可能会减轻这种感觉,但我不知道客户端库的可用性。 MUC Light 非常简单,但在某些方面可能会受到限制 罕见的情况。不过,它可能是最容易开始使用的。

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于多用户聊天 (MUC) 移动应用程序的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

多用户聊天 XMPP

XMPP:只读多用户聊天

XMPP MUC 向房间发送消息时重复消息

用 PHP 构建多通知系统的最佳方法

MUC/Sub 自动删除用户订阅

如何使用 asmack 在 android 中创建多用户聊天应用程序