openfire即时聊天软件搭建
- 将下载好的xampp-osx根据提示进行安装并打开。
F4648516-D77F-4DF4-9031-F7BED0F8C13F.png
-
1B424F11-55A2-4F2C-B188-89059822D4CD.png
-
A
-
-
C51E4113-4627-4076-A8AB-0C5A4A092378.png
Openfire服务器搭建
可以使用它轻易的构建高效率的技师通讯服务器,Openfire的安装和使用也是非常的简单,并利用Web进行后台管理。单台服务器可支持上万并发用户。由于是采用开放的XMPP协议,我们可以使用各种支持XMPP协议的IM客户端软件登陆服务(在这里我就使用了Spark)。
- 下载Openfire,并根据提示进行安装。
-
2337F0EA-21E2-4864-8322-976E3D084138.png3C705089-8D87-44E8-BDCA-AB87D0F18484.png
-
7FDF4D15-E4E8-4AA9-AC5C-2D448EACB2AB.png6477BDE5-63A9-483A-A333-AFED5A64C13C.pngD31A34D9-945C-40C6-BF02-0AE5ACCBC123.png833FB7BA-32F5-403C-9F78-B21389322536.png0602DDA6-5F09-4254-82CF-9E8E3404D753.png7B7802D1-FFB2-4D77-A5ED-6462D71E1577.png
- 到这一步,基本上openfire就已经配置完毕了。
安装Spark客户端
-
按照提示安装客户端,完成后打开
E24D0A1D-BC30-4901-8845-D84B40F25EBA.png -
5D1E4204-7E6A-47EB-9219-65DFDA664C7A.png
- 然后以管理员身份登录,登录成功后刷新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?