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

时间:2017-08-05 09:16:00

标签: android xmpp smack mongoose-im

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

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

哪种方法最好实施?

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

哪种方法最先进?

哪种方法问题少?

哪个最可靠?

2 个答案:

答案 0 :(得分:3)

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

我会尝试逐点解决你的问题:

  

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

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

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

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

  

哪种方法最先进?哪种方法问题较少?不同方法的利弊是什么?

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

我不确定传统的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可能会减轻这种感觉,但我不知道客户端lib的可用性。 MUC Light非常简单,但在某些方面可能有所限制  罕见的情况。不过,这可能是最容易开始合作的。

答案 1 :(得分:0)

对于简单的群聊,你可以从Extended Stanza Addressing开始 - 它在openfire(开箱即用),ejabberd(mod_multicast)和韵律(mod_addressing)中得到支持。使用扩展节点寻址,您可以像在电子邮件中一样为邮件添加多个收件人。