多用户聊天 (MUC) 移动应用程序的最佳方法
Multi User chat (MUC) Best Approach for Mobile Application
我正在使用 XMPP 协议开发移动应用程序聊天,在成功实施一对一聊天后,现在处于多用户聊天 (MUC) 阶段,由于存在三种不同的 MUC 实施方法,所以很困惑传统MUC、Muclight、MUC 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 都支持它).使用扩展节寻址,您可以像在电子邮件中一样向邮件添加多个收件人。
我正在使用 XMPP 协议开发移动应用程序聊天,在成功实施一对一聊天后,现在处于多用户聊天 (MUC) 阶段,由于存在三种不同的 MUC 实施方法,所以很困惑传统MUC、Muclight、MUC 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 都支持它).使用扩展节寻址,您可以像在电子邮件中一样向邮件添加多个收件人。