【问题标题】:How to keep the groupchat room (MUC) existing all the time even if disconnected from the XMPP server?即使与 XMPP 服务器断开连接,如何保持群聊室(MUC)一直存在?
【发布时间】:2013-12-11 03:11:46
【问题描述】:

我正在使用 XMPP (Jabber) 协议中的 openfire/jsjac 开发即时消息模块(J2EE Web 应用程序的一部分)。

openfire 用户/组管理/表已重定向到我们的业务数据库表,这意味着我不再需要在 openfire 中维护用户/组。业务数据库中已设置所有用户/组关系。

下面是我根据要求绘制的关于主窗格的图像。 由于我的声誉低下,我无法发布图片,因此我发布了即时消息主 UI 的图片的网址。很抱歉给您带来不便。 instantmessage main UI Image

你们可以看到,在左侧窗格中,没有用户/组列表。有根据历史记录保存的会话,这让我很困惑,特别是关于组。 我从 XMPP.org 阅读了“XEP-0045:多用户聊天”。我了解有关群聊的一般工作流程: XEP-0045: Multi-User Chat"

  1. 创建房间,生成房间Jid。
  2. 配置房间。(预留房间)
  3. 从业务数据库中获取 usersjid 并将用户绑定(添加)到新创建的房间。
  4. 向房间发送消息。
  5. 服务将向所有组成员发送消息。

并且知道有房间类型是persistent room解释为“如果最后一个住户退出也不会被破坏的房间;反义词:Temporary Room.”由文档。 在同一个文档中有一些句子说:

房间所有者必须能够销毁房间,特别是如果房间是持久的。工作流程如下:

  1. 房间所有者请求销毁房间,可选择指定原因和备用地点。
  2. 房间会从房间中移除所有用户(包括有关备用位置和被移除原因的适当信息)并销毁房间,即使它被定义为持久性也是如此。

看了上面那句话,我比较疑惑,还有几个问题我还是一头雾水。

  1. “乘员出口”是什么意思?如果住户从系统中注销(离线),是否意味着“存在”。并且所有住户都处于离线状态,这是否意味着“持久类型”将使我们创建的房间保持存在?那么房间信息保存在哪里呢?在 openfire 或其他地方?
  2. 假设所有住户都存在(离线),虽然这个创建的房间没有被破坏,那么绑定信息呢?我的意思是假设一个用户被所有者(管理员)授予会员资格,如果这个用户存在或离线,持久房间将保留他的会员角色,对吗?也就是说,只要房间没有被破坏,所有的配置和绑定信息都不会丢失,对吧?
  3. openfire服务器遇到重启的情况,创建的房间及其信息是否还在?
  4. 如果主人重新登录,如何重新找到创建的房间?通过保存房间 ID?

除了上面的问题,我想到了实现具有持久房间的 MUC 的工作流程。请您检查一下,看看流程中存在什么问题?

我的 MUC 工作流程与持久空间

  1. 所有者将出席对象发送到服务器以创建房间并提供房间 JID,并设置房间 ID。
  2. 业主发送IQ对象到服务器配置创建的房间,并设置房间类型为“持久”。
  3. 所有者发送 IQ 对象以授予其他用户成员角色。(绑定信息)
  4. 所有者向ROOM jid发送消息Object,ROOM jid会将所有消息转发给其绑定的成员。
  5. 这个房间的普通成员处理message(receive)并获取房间jid和房间id (希望包括所有者在内的所有用户都可以使用这个房间id重新找到房间他们重新登录..)

那么无论是什么角色,所有者还是普通成员,在房间类型为“persistent”的前提下,如何根据房间jid或房间id重新找到并重新加入创建的房间??强>

【问题讨论】:

    标签: xmpp openfire jsjac


    【解决方案1】:
    1. 规范说“必须能够销毁”,而不是“必须销毁”。持久性 MUC不会在最后一个用户离开 MUC 时自动销毁

    2. 我依赖于 MUC 组件的实现。如果它将持久 MUC 存储在持久存储上,那么它能够在重新启动时重新加载所有持久 MUC。 IIRC Openfire 的 MUC 组件就是这样做的。

    3. 使其持久化。

    【讨论】:

    • 4.如果所有者重新登录,如何重新找到创建的房间?通过保存房间ID?
    【解决方案2】:

    您需要更新openfire中的java代码,这样如果用户离线,组不会被删除。您需要在openfire中针对MUC更新代码

    【讨论】:

    • 能否请您帮我提供 Openfire 中 MUC 的代码。提前致谢!
    【解决方案3】:

    我建议你看看 MUCLight 的新 XMPP 功能。

    它具有多种功能,但并非所有功能都像 whatsapp 和您所期望的那样。

    在这个 MUCLight 组类型中处理持久性。

    MongooseIM 服务器上的 XMPPhttps://mongooseim.readthedocs.io/en/latest/open-extensions/muc_light/

    XMPP over Ejabberd 服务器 : https://www.ejabberd.im/aggregator/categories/2

    【讨论】:

      猜你喜欢
      • 2013-09-24
      • 1970-01-01
      • 2014-11-16
      • 1970-01-01
      • 2016-04-09
      • 2015-02-21
      • 1970-01-01
      • 2016-02-19
      • 1970-01-01
      相关资源
      最近更新 更多