XMPP的地址叫做JabberID(简写为JID),用来标示XMPP网络中的各个XMPP实体。JID有三个属性:domain,node identifier和resource,其中domain是必不可少的部分。(注意:domain和user部分是不分大小写的,但是resource区分大小写。)

属性

  1. user

    通常表示一个向服务器或网关请求和使用网络服务的实体(比如一个客户端),当然它也能够表示其他的实体(比如在多用户聊天系统中的一个房间)。

  2. domain

    通常指网络中的网关或者服务器。

  3. resource

    通常表示一个特定的会话(与某个设备),连接(与某个地址),或者一个附属于某个节点ID实体相关实体的对象(比如多用户聊天室中的一个参加者)。

方法

  • + (XMPPJID *)jidWithString:(NSString *)jidStr

    根据JID的组成规则,从JID字符串中生成JID模型。

    1. + (BOOL)parse:(NSString *)jidStr outUser:(NSString **)user outDomain:(NSString **)domain outResource:(NSString **)resource

      从字符串中分割出user、domain与resource。

      JID字符串的规则为[node”@”]domain[“/“resource],所以查找”@”与”/“的NSRange

      获得user、domain、resource,小写转换

      判断domain不包含”@””,resource不再包含”/“

    2. copy

  • - (BOOL)isEqualToJID:(XMPPJID *)aJID options:(XMPPJIDCompareOptions)mask

    该方法判断两个JID是否相同,mask限定比较的范围。比常用的isEqual:方法要快(isEqual:是NSObject的方法,比较的是hash返回的值)。

    三个属性分别进行字符串内容比较isEqualToString :

    题外话:XMPPJID实现了- (NSUInteger)hash,利用MurmurHash2库,将3个属性字符串的hash值合并。所以JID可以直接进行isEqual:比较。

参考

XMPP协议的原理介绍

XMPP JID 和通信原语有3种:MESSAGE、PRESENCE和IQ