XMPP的地址叫做JabberID(简写为JID),它用来标示XMPP网络中的各个XMPP实体。JID由三部分组成:domainpart,localpart和resourcepart。JID中domain是必不可少的部分。注意:domain和user部分是不分大小写的,但是resource区分大小写。
jid = [ 本地部分 "@" ] 域部分 [ "/" 资源部分 ]
本地部分 = 1*(节点)
;
; 一个 "节点" 就是一个UTF-8编码的Unicode代码点
; 这个点满足 stringprep 中的 Nodeprep 范例
;
域部分 = IP文字 / IPv4地址 / 合法域名ifqdn
;
; "IPv4地址" 和 "IP文字" 规则 定义于 RFC 3986,
; 匹配过程应用 RFC 3986 定义的
; 先到先得匹配(又名 "贪婪的") 机制
;
; 注意从RFC 3986中对于 IP文字规则的重用
; 意味着 IPv6地址由方括号包住
; (也就是, 用 '[' 开始用 ']' 结束),
; 这个 RFC 3920 不管了
;
ifqdn = 1*(名字点)
;
; 一个 "名字点" 就是一个UTF-8编码的Unicode码点,
; 符合 stringprep 的 Nameprep 规范
;
resourcepart = 1*(资源点)
;
; 一个 "资源点" 就是一个UTF-8编码的Unicode码,
; 符合 stringprep 的 Resourceprep 规范
;
**domainpart **:通常指网络中的网关或者服务器。
**localpart **:通常表示一个向服务器或网关请求和使用网络服务的实体(比如一个客户端),当然它也能够表示其他的实体(比如在多用户聊天系统中的一个房间)。
resourcepart:通常表示一个特定的会话(与某个设备),连接(与某个地址),或者一个附属于某个节点ID实体相关实体的对象(比如多用户聊天室中的一个参加者)。
JID种类有:
bare JID:user@domain.tld
full JID:user@domain.tld/resource
例子:
stpeter@jabber.org:表示服务器jabber.org上的用户stpeter。
room@service:一个用来提供多用户聊天服务的特定的聊天室。这里 “room“ 是聊天室的名字, ”service“ 是多用户聊天服务的主机名。
room@service/nick:加入了聊天室的用户nick的地址。这里 “room“ 是聊天室的名字, ”service“ 是多用户聊天服务的主机名,”nick“ 是用户在聊天室的昵称。
为了标示JID,XMPP也有自己的URI,例如xmpp:stpeter@jabber.org,默认规则是在JID前加xmpp:。
smack4.3.3中JID相关的类关系
用Java类抽象XMPP JID,执行字符串准备和验证。虽然jid分为五个类,但jxmpp jid的设计通常只需要使用简单的jid类型。因此,它结合了单jid类方法的简单性,其中jid由单个类表示,不管它们是什么类型的jid,这是jid类层次结构方法的表现性,您可以在方法签名中表示所需的jid类型(例如foo(barejid barejid))。
,______Jid______,
/ / \ \
EntityFullJid / \ DomainFullJid
/ \
EntityBareJid DomainBareJid
还有barejid、fulljid、entityjid和domainjid接口,这些接口由jid类型实现,如下所示:
BareJid FullJid
/ \ / \
/ \ / \
EntityBareJid DomainBareJid EntityFullJid DomainFullJid
EntityJid DomainJid
/ \ / \
/ \ / \
EntityBareJid EntityFullJid DomainBareJid DomainFullJid
jid实例是在jidcreate实用程序的帮助下创建的:
Jid jid = JidCreate.from("foo@bar.example");
Jid的例子:
localpart@domain.part - BareJid,EntityJid,EntityBareJid domain.part - BareJid,DomainJid,DomainBareJid localpart@domain.part/resourcepart - FullJid,EntityJid,EntityFullJid domain.part/resourcepart - FullJid,DomainJid,DomainFullJid