我正在使用 XMPP (Jabber) 协议中的 openfire/jsjac 开发即时消息模块(J2EE Web 应用程序的一部分)。
openfire 用户/组管理/表已重定向到我们的业务数据库表,这意味着我不再需要在 openfire 中维护用户/组。所有用户/组关系已在业务数据库中设置。
下面是我根据要求绘制的关于主窗格的图像。由于我的声誉低下,我无法发布图片,因此我发布了即时消息主 UI 的图片的网址。很抱歉给您带来不便。 即时消息主 UI 图像
你们可以看到,在左侧窗格中,没有用户/组列表。有根据历史记录保存的会话,这让我很困惑,特别是关于组。我从 XMPP.org 阅读了“XEP-0045:多用户聊天”。我知道关于群聊的一般工作流程: XEP-0045:多用户聊天”
- 创建房间,制作房间Jid。
- 配置房间。(预留房间)
- 从业务数据库中获取 usersjid 并将用户绑定(添加)到新创建的房间。
- 向房间发送消息。
- 服务将向所有组成员发送消息。
并且知道有房间类型是持久房间被解释为“如果最后一个居住者退出,则不会被破坏的房间;反义词:临时房间。 ”由doc。在同一个文档中有一些句子说:
房间所有者必须能够销毁房间,特别是如果房间是持久的。工作流程如下:
- 房间所有者请求销毁房间,可选择指定原因和替代地点。
- 房间从房间中移除所有用户(包括有关备用位置和被移除原因的适当信息)并销毁房间,即使它被定义为持久性。
看了上面这句话,我更加疑惑了,还有几个问题我还是一头雾水。
- “乘员出口”是什么意思?如果住户从系统注销(离线),是否意味着“存在”。并且所有住户都处于离线状态,这是否意味着“持久类型”将使我们创建的房间保持存在?那么房间信息保存在哪里呢?在openfire或其他地方?
- 假设所有住户都存在(离线),虽然这个创建的房间没有被破坏,那么绑定信息呢?我的意思是假设一个用户被所有者(管理员)授予会员资格,如果这个用户存在或离线,持久房间将保留他的会员角色,对吗?也就是说,只要房间没有被破坏,所有的配置和绑定信息都不会丢失,对吧?
- openfire服务器遇到重启的情况,创建的房间及其信息是否还在?
- 如果所有者重新登录,如何重新找到创建的房间?通过保存房间ID?
除了上面的问题,我想到了实现具有持久房间的 MUC 的工作流程。请您检查一下,看看流程中存在什么问题?
我的具有持久空间的 MUC 工作流程
- 所有者向服务器发送出席对象以创建房间并给出房间JID,并设置房间ID。
- 业主向服务器发送 IQ 对象以配置创建的房间并将房间类型设置为“持久”。
- 所有者发送 IQ 对象授予其他用户成员角色。(绑定信息)
- 所有者向 ROOM jid 发送消息 Object,ROOM jid 将所有消息转发给其绑定的成员。
- 该房间的普通成员处理消息(接收)并获取房间jid和房间id (我希望包括所有者在内的所有用户在重新登录时都可以使用这个房间id重新找到房间..)
那么无论是什么角色,所有者还是普通成员,在房间类型为“持久”的前提下,如何根据房间jid或房间id重新找到并重新加入创建的房间?