我正在使用XMPP(Jabber)协议中的openfire/jsjac开发即时通讯模块(J2EE Web应用程序的一部分)。
openfire用户/组管理/表已经被重定向到我们的业务数据库表,这意味着我不再需要在openfire中维护用户/组。所有用户/组关系都在业务数据库中设置好了。
下面是我根据要求绘制的主窗格图像。由于我的声誉低,所以无法发布图片,因此我发布了一个包含即时消息主UI图像的网址。对于不便造成的不便,敬请谅解。 instantmessage main UI Image
你们可以看到在左边的窗格中,没有用户/组列表。有保存历史记录的会话,这让我感到困惑,特别是关于群组。
我阅读了来自XMPP.org的“XEP-0045: Multi-User Chat”。我了解了有关群聊的一般工作流程:
XEP-0045: Multi-User Chat"- 创建房间,产生房间Jid。
- 配置房间。(保留房间)
- 从业务数据库中获取用户jid并将用户绑定(添加)到新创建的房间。
- 向房间发送消息。
- 服务将向所有组成员发送消息。
我知道有一种房间类型是持久房间,文档中解释为“如果最后一个占用者退出,则不会销毁的房间;反义词:临时房间。” 在同一文档中,有些句子说:
房间所有者必须能够销毁房间,特别是如果房间是持久的。工作流程如下:
- 房主请求销毁房间,可以选择指定原因和备用场所。
- "占用者退出"的意思是什么?如果一个占用者从系统中注销(离线),这是否意味着"退出"。并且所有占用者都处于离线状态,这是否意味着"持久类型"将使我们创建的房间保持存在?那么房间信息保存在哪里?在openfire还是其他地方?
- 假设所有占用者存在(离线),尽管这个创建的房间没有被销毁,但绑定信息怎么样呢?我的意思是假设一个用户由管理员授予成员身份,如果这个用户存在或离线,持久房间将保留他的成员身份,对吗?换句话说,只要房间没有销毁,所有配置和绑定信息都不会丢失,对吗?
- 如果openfire服务器遇到重新启动的情况,创建的房间及其信息还会在那里吗?
- 如果管理员重新登录,如何重新找到创建的房间?通过保存房间ID吗?
除了以上问题,我认为实现带有持久房间的MUC的工作流程。您能否检查一下并查看工作流程中存在的问题?
我的带有持久房间的MUC工作流程
- 所有者向服务器发送出席对象以创建房间并提供房间JID,并设置房间ID。
- 所有者向服务器发送IQ对象以配置创建的房间并将房间类型设置为"persistent"。
- 所有者发送IQ对象以授予其他用户成员身份(绑定信息)。
- 所有者向ROOM jid发送消息对象,ROOM jid将转发所有消息给其绑定成员。
因此,无论是房主还是普通成员,如何根据聊天室 JID 或聊天室 ID 重新查找和重新加入已创建的“永久性”聊天室?