我正在 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
- 创建房间,生成房间Jid。
- 配置房间。(预留房间)
- 从业务数据库获取 usersjid 并将用户绑定(添加)到新创建的房间。
- 发送消息到房间。
- 服务将向所有组成员发送消息。
并得知有房型是持久的房间解释为“如果最后一个居住者退出,房间不会被摧毁;反义词:临时房间。“由医生。
在同一篇文档中,有一些句子:
房间所有者必须能够摧毁房间,特别是如果房间是持久的。工作流程如下:
- 房间主人要求销毁房间,并可选择指定原因和备用地点。
- 该房间会从房间中删除所有用户(包括有关备用位置和删除原因的适当信息)并销毁该房间,即使它被定义为持久房间。
看完上面这句话,我更加疑惑了,有几个问题我还是很困惑。
- “乘员退出”是什么意思?如果一个住户从系统注销(离线),这是否意味着“存在”。并且所有住户都离线,这是否意味着“持久型”将使我们创建的房间保持存在?那么房间信息保存在哪里呢?在明火或其他地方?
- 假设所有居住者都存在(离线),虽然这个创建的房间没有被破坏,那么绑定信息呢?我的意思是假设一个用户被所有者(管理员)授予会员资格,如果该用户存在或离线,持久房间将保留他的会员角色,对吗?也就是说,只要房间不被破坏,所有的配置和绑定信息都不会丢失,对吗?
- openfire服务器遇到重启的情况,创建的房间及其信息是否还在?
- 房主重新登录后如何重新找到创建的房间?通过保存房间ID?
除了上述问题之外,我还想到了实现具有持久房间的MUC的工作流程。请您检查一下流程中存在什么问题吗?
我的具有持久空间的 MUC 工作流程
- 所有者发送状态对象到服务器来创建房间并赋予房间JID,并设置房间ID。
- 所有者将 IQ 对象发送到服务器以配置创建的房间并将房间类型设置为“持久”。
- 所有者发送 IQ 对象来授予其他用户成员角色。(绑定信息)
- 所有者将消息Object发送给ROOM jid,ROOM jid会将所有消息转发给其绑定的成员。
- 该房间的普通成员处理消息(接收)并获取房间 jid 和room id (我希望包括业主在内的所有用户重新登录时都可以使用这个房间ID重新找到房间..)
那么无论角色是什么,所有者还是普通成员,如何在房间类型为“持久”的前提下,根据房间jid或房间id重新查找并重新加入创建的房间?
规范说“必须能够摧毁”,而不是“必须摧毁”。持久性MUCdo not当最后一个用户离开 MUC 时自动销毁
I 取决于 MUC 组件的实现。如果它将持久性 MUC 存储在持久性存储上,则它能够在重新启动时重新加载所有持久性 MUC。 IIRC Openfire 的 MUC 组件就是这样做的。
让它持久。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)