iOS XMPP系列教程(Swift)二 框架介绍

介绍

XMPP框架分成两部分

  • XMPPCore
  • 拓展 XEP

XMPPCore 的类

  • XMPPStream
  • XMPPParser
  • XMPPJID
  • XMPPElement
  • XMPPIQ
  • XMPPMessage
  • XMPPPresence
  • XMPPModule
  • XMPPLogging
  • XMPPInternal
  • XMPPStream

XMPPStream

XMPPStream是xmpp的核心,这是你需要接触的主要类,所有的拓展类和定制类需要添加它,它由一些有趣的功能设计,让框架灵活、可拓展和更加容易在它之上开发

XMPPParser

XMPPParser 是XMPPStream 使用的一个类,你一般不需要和它打交道

XMPPJID

XMPPJID 提供多个JID(Jabber Identifier) 实现,支持解析JID,并解析JID的多种格式,它实现了NSCopying代理,因此JID可以被用作NSDictionary的key。它也实现了NSCoding协议。

XMPPElement

XMPPElement 是基本的类,用于三种主要的XMPP 元素 XMPPIQ,XMPPMessageXMPPPresence
XMPPElement 继承自NSXMLElement

客户端与服务器交互的三个实体:IQ、Message、Presence

继承关系

  • XMPPIQ -> XMPPElement -> NSXMLElement -> NSXMLNode -> NSObject
  • XMPPMessage -> XMPPElement-> NSXMLElement -> NSXMLNode -> NSObject
  • XMPPPresence -> XMPPElement -> NSXMLElement -> NSXMLNode -> NSObjec

NSXML 有一个NSXMLElement+XMPP拓展,这个拓展提供了多个转换方法让你的代码更加简洁可读

IQ (Info / Query)

一种请求/响应机制,从一个实体从发送请求,另外一个实体接受请求,并进行响应。例如,client在stream的上下文中插入一个元素,向Server请求得到自己的好友列表,Server返回一个,里面是请求的结果。
主要的属性是type。包括:
Get :获取当前域值。类似于http get方法。
Set :设置或替换get查询的值。类似于http put方法。
Result :说明成功的响应了先前的查询。类似于http状态码200。
Error: 查询和响应中出现的错误。
例子:

1
2
3
4
5
6
<iq from="alice@wonderland.lit/pda"  
id="rr82a1z7"
to="alice@wonderland.lit"
type="get">
<query xmlns="jabber:iq:roster"/>
</iq>

Message

是发送的消息实体,保存消息的信息

1
2
3
4
5
<message  
to="lily@jabber.org/contact"
type="chat" >
<body> 你好,在忙吗</body>
</message>

Presence

presence用来表明用户的状态,如:online、away、dnd(请勿打扰)等
用来发送用户的状态

XMPPMddule

XMPPMddule 提供可选的附加拓展功能,如果你做应用,你可能创建你自己的类,注册和接受代理。然而,如果你正在实现基本的XEP或者你想要添加特定拓展,你需要创建顶层的XMPPModule。

XMPPLogging

XMPPLoging 提供一个非常快速、高效、灵活的日志框架

XMPPInternal

XMPPInternal 仅仅是一和core和多个拓展有关的个网络素材

拓展

添加modules

xmpp框架自带了一些拓展,当然你也可以写你希望的拓展,我们不会review任何可用的拓展,但我们会列一些例子

  • XMPPReconnect 意外断开会自动重连
  • XMPPRoster 提供基本的roster名册
  • XMPPRoom 提供多用户聊天支持
  • XMPPPubSub 公开subscribe

所有的概念就说到这里下一篇介绍具体应用