专业IM即时通讯软件开发,值得信赖!

理解XMPP中的JID,及smack4.3.3中JID相关的类

openfire 云聊IM 325℃

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
喜欢 (0)
仿微信聊天软件开发
点击这里给我发消息