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 中的聊天应用程序?
如何使用 PHP 在 openfire 中创建聊天室并将用户添加到房间中
使用 Openfire 服务器和 XMPP(SMACK)客户端的 Android 聊天应用程序 [关闭]