如何保持群聊室(MUC)始终存在,即使与XMPP服务器断开连接?

时间:2013-11-26 05:30:09

标签: xmpp openfire jsjac

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

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

下面是我根据要求绘制的关于主窗格的图片。 由于我的声望很低,我无法发布图片,所以我发布了一个url作为我的即时消息主UI的图像。很抱歉给您带来不便。 instantmessage main UI Image

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

  1. 创建房间,制作roomJid。
  2. 配置房间。(预留房间)
  3. 从business数据库获取usersjid并将用户绑定(添加)到新创建的房间。
  4. 向房间发送消息。
  5. 服务将向所有群组成员发送消息。
  6. 并知道房间类型是持续房间被解释为“如果最后一个占用者退出则不被破坏的房间;反义词:临时房间。”通过doc。 在同一个文档中有一些句子说:

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

    1. 房间所有者要求销毁房间,可选择指定原因和替代场地。
    2. 会议室将所有用户从会议室中删除(包括有关备用位置的适当信息以及被删除的原因)并销毁会议室,即使它被定义为持久性。
    3. 阅读完上述句子后,我更加困惑,有几个问题我仍然感到困惑。

      1. “占用者出口”是什么意思?如果一个占用者从系统中退出(离线),那就意味着“存在”。并且所有占用者都处于离线状态,这是否意味着“持久类型”将使我们创建的房间保持存在?那么保存房间信息的地方?在openfire或其他地方?
      2. 假设所有占用者都存在(离线),通过这个创建的房间没有被破坏,绑定信息怎么样?我的意思是假设一个用户被所有者(管理员)授予了成员资格,如果该用户存在或离线,持久性房间将保留其成员角色,对吧?换句话说,只要房间没有被破坏,所有的配置和装订信息都不会丢失,对吗?
      3. openfire服务器遇到重启的情况怎么样,创建的房间及其信息是否仍然存在?
      4. 如果所有者重新登录,如何重新找到创建的房间?通过保存房间ID?
      5. 除了上面的问题,我还想到了用持久空间实现MUC的工作流程。请你检查一下,看看流程中存在哪些问题?

        我的具有持久空间的MUC的工作流程

        1. 所有者将状态对象发送到服务器创建房间并给房间JID,并设置房间ID。
        2. 所有者将IQ对象发送到服务器以配置创建的房间并将房间类型设置为“持久性”。
        3. 所有者发送IQ对象以授予其他用户成员资格角色。(绑定信息)
        4. 所有者将消息Object发送到ROOM jid,ROOM jid会将所有消息转发给其绑定成员。
        5. 这个房间的普通会员处理消息(接收)并获取房间jid和房间ID (我希望包括所有者在内的所有用户都可以使用此房间ID重新找到房间时他们重新认识..)
        6. 所以无论角色是什么,所有者或普通会员,如何根据房间jid或房间id重新加入和重新加入创建的房间,前提条件是房间类型是“持久的”??

3 个答案:

答案 0 :(得分:2)

  1. 规范说“必须能够摧毁”,而不是“必须摧毁”。当最后一个用户离开MUC时,持久性MUC 会自动销毁

  2. 我依赖于MUC组件的实现。如果它将持久性MUC存储在持久存储上,则它能够在重新启动时重新加载所有持久性MUC。 IIRC是Openfire的MUC组成部分。

  3. 让它持久。

答案 1 :(得分:0)

您需要更新openfire中的java代码,以便在用户离线时不会删除组。您需要在openfire中针对MUC更新代码

答案 2 :(得分:0)

我建议您查看MUCLight的新XMPP功能。

这有多种功能,但不仅仅是whatsapp和你期望的功能。

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

通过MongooseIM服务器的XMPP https://mongooseim.readthedocs.io/en/latest/open-extensions/muc_light/

XMPP over Ejabberd Server https://www.ejabberd.im/aggregator/categories/2