Openfire 服务器未将聊天室保存到 ofMucRoom 表

Posted

技术标签:

【中文标题】Openfire 服务器未将聊天室保存到 ofMucRoom 表【英文标题】:Openfire server not saving chatroom to the ofMucRoom table 【发布时间】:2014-03-07 07:39:12 【问题描述】:

我正在开发 ios 聊天应用程序并使用 openfire 服务器。经过成功的研究,我设法创建了一个房间。我正在创建的房间是持久的,我可以看到群聊选项卡中列出的那个房间开火并且也是持久的。但是当我打开我的 mysql 数据库时,我在 mucRoom 表中看不到任何条目。另外 mucMember 表也是空的。

即使使用 spark 客户端,我也无法登录到创建的房间,因为它总是说正在连接...

在 openfire 管理员中,当我编辑新创建的房间并再次保存时,它会出现在 db 中,然后我可以使用 Spark 客户端发送/接收消息。

有什么问题?为什么openfire没有将房间从缓存中保存到db?即使在openfire中也没有这样的设置。这是所有地方的主要问题,我找不到正确的答案。有人有解决办法吗?

【问题讨论】:

【参考方案1】:

您的 iOS 客户端响应告诉您问题所在。房间的设置必须由房间创建者确认。在此之前,它被锁定,您将继续看到该消息。房间创建过程概述here。

我的客户端应用程序使用 iOS/OSX XMPPFramework,并且我的 Openfire 服务器配置为创建“即时房间”。 XMPPFramework 使房间的创建和确认变得非常简单。通过将 XMPP Room 委托添加到流中,当用户将其状态发送到尚不存在的房间时,您将获得委托回调。此时,您可以确认房间设置或进行适当的修改。

#pragma mark XMPPRoom Delegate

- (void)xmppRoomDidCreate:(XMPPRoom *)sender

    DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
    [self.xmppRoom configureRoomUsingOptions:nil]; //nil confirms the default settings


- (void)xmppRoomDidJoin:(XMPPRoom *)sender

    DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);


- (void)xmppRoomDidLeave:(XMPPRoom *)sender

    DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);


- (void)xmppRoom:(XMPPRoom *)sender occupantDidJoin:(XMPPJID *)occupantJID

    DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);


- (void)xmppRoom:(XMPPRoom *)sender occupantDidLeave:(XMPPJID *)occupantJID

    DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);


- (void)xmppRoom:(XMPPRoom *)sender didReceiveMessage:(XMPPMessage *)message fromOccupant:(XMPPJID *)occupantJID

    DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);

我没有查看房间何时持久化的详细信息,但我也注意到在我的用例中,管理页面中显示的房间与数据库中的内容存在差异。

【讨论】:

以上是关于Openfire 服务器未将聊天室保存到 ofMucRoom 表的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 xmpp 框架和 openfire 服务器将电话簿联系人添加到 ios 中的聊天应用程序?

如何让 Openfire 用户出现在聊天室中

如何使用 PHP 在 openfire 中创建聊天室并将用户添加到房间中

使用 Openfire 服务器和 XMPP(SMACK)客户端的 Android 聊天应用程序 [关闭]

如何使用 asmack android 从 Openfire 中检索一对一的聊天记录

如何发送消息?安卓,asmack,openfire