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

2024-04-25

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

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

下面是我根据要求绘制的主窗格图像。 由于我的声誉较低,我无法发布图像,因此我发布了即时消息主 UI 图像的 url。很抱歉给您带来不便。即时消息主 UI 图像 http://xiangce.baidu.com/picture/detail/8f8d8e4830294a86cba3fb4f71137ff9bb631b8d

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

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

并得知有房型是持久的房间解释为“如果最后一个居住者退出,房间不会被摧毁;反义词:临时房间。“由医生。 在同一篇文档中,有一些句子:

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

  1. 房间主人要求销毁房间,并可选择指定原因和备用地点。
  2. 该房间会从房间中删除所有用户(包括有关备用位置和删除原因的适当信息)并销毁该房间,即使它被定义为持久房间。

看完上面这句话,我更加疑惑了,有几个问题我还是很困惑。

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

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

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

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

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


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

  2. I 取决于 MUC 组件的实现。如果它将持久性 MUC 存储在持久性存储上,则它能够在重新启动时重新加载所有持久性 MUC。 IIRC Openfire 的 MUC 组件就是这样做的。

  3. 让它持久。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 未调用“MultiUserChat.addInvitationListener”

    我正在研究一个群聊过程 我已成功发送邀请并使用 PSI 收到此邀请 但M无法调用我自己的 MultiUserChat addInvitationListener 我已经做了很多方法 但都是徒劳 这是我的尝试之一 ProviderManage
  • 无法与任何提供的主机建立套接字

    我正在努力解决 android 中的文件传输问题 我正在使用 smack 4 1 连接到 openfire 服务器 我的问题是 当我使用 Spark 到 Spark 文件传输时 它工作正常 但是当我从Spark 到 Android 或 An
  • Strope字符编码问题

    我正在开发 XMPP 客户端 并且在发送 接收消息时遇到问题Strophe http strophe im JavaScript 版本 问题是包含 特殊 字符的消息 例如 如果我发送 我在这 外部客户端 即 iChat 将显示 我在这儿 s
  • 为什么openfire的用户在会话中不存在SESSION的情况下仍保持在线

    I m developing an android app contains Messaging using OpenFire as an XMPP server and using Smack for android client All
  • XMPP BOSH 与 COMET

    我想编写一个实时聊天应用程序 并且需要决定使用哪些技术 这些技术之间有什么区别 您更喜欢哪一种 为什么 WebSockets 不是一个选择 因为它还没有准备好在野外战斗 Thanks 你应该阅读这个问题 为什么 BOSH 没有更受欢迎 尤其
  • XEP - 0055 与 iOS 和 ejabberd?

    我正在尝试实现 ejabbed 支持的 XEP 0055 如下所示支持的 xep https www ejabberd im protocols 这是我的要求 XMPPIQ iq XMPPIQ alloc init iq addAttrib
  • 如何断开 XMPPPY 客户端对象的连接

    使用 XMPPPY 连接到 XMPP 服务器非常简单 from xmpp client import Client as XMPPClient self xmppClient XMPPClient jabber foo com if not
  • 是否有任何选项可以禁用开火服务器上的群聊消息历史记录?

    我一直在创造group chat application 在实现群聊功能时我面临问题 当我每次join the room open fire sends last two days messages 这是我每次加入房间时收到的帖子消息
  • 运行自定义 XMPP 服务器应用程序有多容易?

    参考这个问题 https stackoverflow com questions 2904163 what do i need to know before working on an im application XMPP 被认为是 IM
  • OpenFire - 使用 PubSub 的永久群聊

    首先从这个问题 Smack openfire 如何让用户永久留在群聊室 https stackoverflow com questions 19653877 asmack openfire how do i keep a user perm
  • 为什么发送电子邮件需要多个邮件服务器跃点?

    当我向某人发送电子邮件时 我认为 我的电子邮件被发送到我的家庭服务器 然后电子邮件被发送到目标服务器 最后被发送到我想要发送给的人 有时 这需要多次跳跃 这是让我困惑的一点 为什么这需要多跳 为什么邮件不能直接发送到目标服务器 例如 XMP
  • 在 Android 4+ 中使用 Android TrustStore for aSmack (ICS)

    我不是密钥库方面的专家 并且很难理解其中的细微差别 但这就是我所取得的进展 在使用 asmack 构建创建 xmpp 连接时发现here https github com Flowdalic asmack人们仍然需要更改信任库 通常可以说是
  • 如何使用 Node.JS 通过 XMPP 发送 HTML 格式的消息?

    这个问题讨论使用node xmpp发送消息 在 Node js 上通过 XMPP 连接到 Google Talk https stackoverflow com questions 4349577 connecting to google
  • 如何在 Android 的这个特定用例中实现 MQTT?

    我的用例 登录到我的应用程序的用户应该能够向在另一台 Android 设备上登录到该应用程序的自己发送消息 如果用户拥有多个设备 那么一旦他打开该消息 其他设备上的通知必然会消失 Doubts 如何跨设备向特定用户发送数据 我了解如何使用
  • iphone XMPP 应用程序运行后台

    我使用 XMPP 框架创建了一个聊天应用程序 当我退出应用程序 进入后台模式 时 我想接收聊天消息 并且还需要显示图标徽章 我该怎么做 您确实可以通过将基于 XMPP 框架的应用程序称为 VoIP 应用程序来在 iOS4 中的后台运行该应用
  • 如何通过 BOSH 使用 XMPP

    所以我对 BOSH 到底是什么有点困惑 这是一种使用http与XMPP服务器交互的方式吗 例如 openfire 使用 BOSHhttp domain com 7070 http bind http domain com 7070 http
  • XMPP 多用户聊天设置群聊头像

    我正在开发一个带有聊天功能的 iOS 应用程序 我正在为该应用程序使用 XMPP 在XMPP多用户聊天中 是否有功能可以像我们在whatsapp中那样为会议室设置头像或群组图像 我检查过XEP 0045 http xmpp org exte
  • 登录异常 SASL 身份验证在 android 中使用 DIGEST-MD5 asmack 机制失败

    我尝试连接 Xmpp 服务器 但出现异常 登录异常 SASL 身份验证使用 DIGEST MD5 机制失败 我使用这个代码 任何人都可以帮助我 或者代码 try if xmppConnection null ConnectionConfig
  • 使用 Strope.js 在 openfire 上进行新注册

    我使用 strope js 库和 Openfire 在浏览器中发送和接收 XMPP 消息 它工作正常 但仅适用于我的联系人列表 花名册中已有的用户 我需要让新用户注册 我知道如何将现有人员添加到我的名册中 但我不知道如何在 openfire
  • 使用 proguard 时,smack for android 失败

    我在 Android 应用程序中使用 smack 库 4 1 2 连接到 XMPP 服务器 当代码没有缩小时 即使用 proguard 它运行得很好 但在发布模式下 启用混淆器后 应用程序一旦连接到服务器就会崩溃 我试图按照此处的建议保持所

随机推荐

  • 刷新div(导致浏览重绘它)

    在 Web 应用程序中 我在动态内容方面遇到了一些麻烦 在 jQuery UI 选项卡控件上方隐藏或显示的表单会导致呈现问题 直到用户将鼠标悬停在选项卡上 然后导致选项卡标题重新绘制正确的位置 它只发生在 IE7 中 作为一个快速破解 我在
  • Mongoose 多更新

    我想用不同的值更新多个文档 我的数据库看起来像这样 id 1 value 50 id 2 value 100 此查询返回错误 因为我传递的是数组而不是 set 中的对象 Model update id in ids set ids valu
  • 为什么 doctype 不自动关闭

    提供了一个 xhtml 文档类型 例如 为什么这个标签本身允许非自关闭 根本不关闭 Aka为什么不是 它不是一个标签 元素 这是一个声明 这就是声明的语法 文档类型声明 http www w3 org TR REC xml sec prol
  • 反应导航选项中“lazyLoad”和“lazy”之间的区别

    我在选项卡更改上重新渲染组件时遇到问题 并且显然添加lazyLoad true导航选项解决了它 但我不太明白它是如何工作的 特别是在那之前 我遇到了另一个问题并添加lazy true选项解决了它 所以我的问题是 两者之间有什么区别以及它们在
  • 更改grep命令的分隔符

    我在用grep检测 a href xxxx something here a 当链接在输入中分成两行时 这不起作用 我想 grep 检查直到它检测到但现在它只是将输入输入到 grep 中 直到检测到新行为止 所以如果输入是这样的 a hre
  • 通过模板参数中的 SFINAE 选择构造函数

    我试图通过 SFINAE 选择一个构造函数 如下所示 template
  • 您可以使用 CASE WHEN THEN 别名进行 GROUP BY 吗?

    我有一个从别名为 Length 的 CASE WHEN THEN 状态 或者可以使用多个 IF 语句 计算的 SELECT 语句 并且我需要将结果正确地分组在一起 SELECT 似乎有效 但该小组将它们分组错误 这是我的声明 SELECT
  • SQL Developer 中查询的快捷方式

    我的同事使用 TOAD 有一个很好的功能 即查询快捷方式 例如 他们编写 get customer info 并且该单词被完整连接查询替换 这个功能对于提高生产力非常有用 我的机器未获得 Toad 许可 并且我使用 Oracle SQL D
  • 如何从 Linux 和 Solaris 上的挂载中提取 NFS 信息?

    我需要使用提取 NFS 挂载信息mount在 Linux RHEL 4 5 和 Solaris Solaris 10 系统上 由于这是 SSH 命令的一部分 因此提取需要在一行中进行 不幸的是 Linux 和 Solaris 在该行的不同部
  • 如何在南迁中访问 auth User 的 User.objects.create_user(...) ?

    我没有使用 django 的 auth 模块 而是使用了自己的模块 并且已经非常后悔了 为了纠正这种情况 我正在尝试将数据从我的用户模型迁移到 django auth models User 我创建了一个数据迁移 如下所示 def forw
  • WPF C# - 计时器倒计时

    如何在用 WPF C 编写的代码中实现以下内容 我有一个 ElementFlow 控件 在其中实现了 SelectionChanged 事件 该事件 根据定义 在控件的项目选择发生更改时触发特定事件 我想要它做的是 启动计时器 如果计时器达
  • 尽管我可以使用 Visual Studio 检查它,但 selenium Web 元素上的文本属性为空

    在没有发布 C 代码和标记页面的情况下 是否有人知道此代码的原因 var link driver FindElement By Id field Field var id link GetAttribute id var text link
  • 如何在Tomcat 7.0.47启动时注册oracle jdbc驱动程序?

    我将ojdbc6 jar复制到tomcat安装文件夹中的lib文件夹中 当我部署在 JDBC 连接中使用 Oracle 驱动程序的 Web 应用程序时 服务器说找不到驱动程序类 我被迫手动执行 DriverManager registerD
  • 如何在终端中显示图像?

    是否有任何类型的实用程序可以用来将图像转换为 ASCII 然后在我的终端中打印 我寻找过 但似乎没有找到 一个名为cacaview http linux die net man 1 cacaview允许您执行此操作 它是交互式的 允许您平移
  • Delphi - 列表索引越界(4)

    我知道这个问题已经被提出了一百万次 但是 我无法理解为什么这段代码会抛出错误 我已经找到了导致错误的罪魁祸首 FOR 循环 但是 我没有看到它有任何问题 我收到错误 列表索引超出范围 4 function TNetwork FeedForw
  • 如何消除autocrlf造成的损害?

    我已经使用 git 并将 autocrlf 设置为 true 一段时间了 我一直通过 cygwin 与 git svn 一起使用它 这给我带来了很多问题 我明白了here https stackoverflow com questions
  • Hilt Fragments 必须附加到 @AndroidEntryPoint Activity。找到:类 androidx.fragment.app.testing.FragmentScenario$EmptyFragmentActivity

    当我运行单元测试代码时出现以下错误 Caused by java lang IllegalStateException Hilt Fragments must be attached to an AndroidEntryPoint Acti
  • location.href = location.href 不会重定向

    在我的 javascript 代码中 在某些时候 我需要刷新窗口 用户已上传新图像 但在页面中仍然可以看到它 我想知道为什么 location href location href 不刷新窗口 要刷新窗口 请尝试 window locati
  • 如何“使用 Logger API 将日志添加到您的项目”? (谷歌脚本)

    我正在尝试查看脚本的输出 但是当我转到 查看日志 时 我收到一条警报 未找到日志 使用 Logger API 将日志添加到您的项目中 如何添加记录器 API 您需要添加到您的代码中 Logger log Yes this was logge
  • 即使与XMPP服务器断开连接,如何保持群聊室(MUC)始终存在?

    我正在 XMPP Jabber 协议中使用 openfire jsjac 开发即时消息模块 J2EE Web 应用程序的一部分 openfire用户 组管理 表已重定向到我们的业务数据库表 这意味着我不再需要在openfire中维护用户 组