openfire即时聊天软件搭建
- 将下载好的xampp-osx根据提示进行安装并打开。
-
-
-
-
Openfire服务器搭建
可以使用它轻易的构建高效率的技师通讯服务器,Openfire的安装和使用也是非常的简单,并利用Web进行后台管理。单台服务器可支持上万并发用户。由于是采用开放的XMPP协议,我们可以使用各种支持XMPP协议的IM客户端软件登陆服务(在这里我就使用了Spark)。
- 下载Openfire,并根据提示进行安装。
-
-
- 到这一步,基本上openfire就已经配置完毕了。
安装Spark客户端
-
按照提示安装客户端,完成后打开
-
- 然后以管理员身份登录,登录成功后刷新openfire管理界面,可以看到头像变亮了,说明环境配置成功。接下来就可以撸码了。
代码实现
- 主要实现这些功能:
- 注册、登录、退出登录;
- 添加好友、好友请求
- 发送消息、接收消息
- 消息记录
- 新建一个管理类XMPPManager,创建以下对象:
import UIKit
import XMPPFramework
// 枚举:连接服务器的目的
enum ConnectServerPurpose : Int{
case connectServerToLogin // 登录
case connectServerToRegister // 注册
}
class XMPPManager: NSObject {
deinit {
NotificationCenter.default.removeObserver(self)
}
fileprivate var password : String?
fileprivate var userName : String?
fileprivate var connectServerPurpose : ConnectServerPurpose = .connectServerToLogin
// 通信通道对象
var xmppStream : XMPPStream?
// JID
var xmppJID : XMPPJID?
// 好友花名册管理对象
var xmppRoster : XMPPRoster?
// 花名册数据存储对象
var xmppRosterCoreDataStorage : XMPPRosterCoreDataStorage?
// 信息归档对象
var xmppMessageArchiving : XMPPMessageArchiving?
// 信息存储对象
var xmppMessageArchivingCoreDataStorage : XMPPMessageArchivingCoreDataStorage?
var friendsListResultController : NSFetchedResultsController<NSFetchRequestResult>?
var chatRecordsResultController : NSFetchedResultsController<NSFetchRequestResult>?
// 好友请求
var xmppPresence : XMPPPresence?
// 单例
static let manager : XMPPManager = {
let manager = XMPPManager.init()
// 创建通信通道对象
manager.xmppStream = XMPPStream.init()
// 设置服务器IP地址
manager.xmppStream?.hostName = kHostName
// 设置服务器端口
manager.xmppStream?.hostPort = kHostPort
// 添加代理
manager.xmppStream?.addDelegate(manager, delegateQueue: DispatchQueue.main)
// 花名册数据存储对象
manager.xmppRosterCoreDataStorage = XMPPRosterCoreDataStorage.sharedInstance()
manager.xmppRoster = XMPPRoster.init(rosterStorage: manager.xmppRosterCoreDataStorage)
manager.xmppRoster?.activate(manager.xmppStream)
manager.xmppRoster?.addDelegate(manager, delegateQueue: DispatchQueue.main)
// 信息存储对象
manager.xmppMessageArchivingCoreDataStorage = XMPPMessageArchivingCoreDataStorage.sharedInstance()
manager.xmppMessageArchiving = XMPPMessageArchiving.init(messageArchivingStorage: manager.xmppMessageArchivingCoreDataStorage, dispatchQueue: DispatchQueue.main)
// 激活通信通道对象
manager.xmppMessageArchiving?.activate(manager.xmppStream)
return manager
}()
// 连接服务器
func connectToServer(withUserName userName: String) {
// 创建XMPPJID对象
self.xmppJID = XMPPJID.init(user: userName, domain: kDomin, resource: kResource)
// 设置通信通道对象的JID
self.xmppStream?.myJID = self.xmppJID
// 发送请求
if self.xmppStream?