XMPP协议中的Resource(同帐号多处登录依据)

XMPP协议支持同一帐号在多处登录,并且支持对不同登录的区分,这种区分通过绑定resourcepart实现。

XMPP中用户帐号格式为```“localpart@domainpart”```,如"",类似于EMail地址,其中domainpart是服务器域名,localpart为帐号ID,所以,Client通过domainpart即可唯一的确定Server,而Server通过localpart就可以唯一的确定Clinet所登录的帐号(并不是唯一的确定Client,因为XMPP支持一个帐号在多处同时登录)。

那么,如何唯一的确定Client而不是Client对应帐号呢?XMPP协议中引入了resourcepart,当Client连接Server成功后,Client会绑定一个唯一的resourcepart,表示为。如此,服务器就可以唯一的定位到任意一个Client了。使用Openfire为服务器,会发现有个有趣的现象:帐号A在Client1和Client2上同时登录,由帐号B发送给帐号A消息,Client1和Client2会同时收到此消息,用Client1回复消息,B再发送消息给A,就只有Client1能收到了,再用Client2发送消息给B,B回复后,只有Client2能收到,Client1收不到。有了resourcepart之后,这一切变得很简单,也很容易理解。

resource part的生成有两种方式:1.Server收到Client的请求后生成;2.Client直接将resourcepart发送至Server。

至于服务器是否一定要支持多用户同时登录,可根据实际需求确定,XMPP协议只是提供了一种支持,并不一定非这么做。如要禁止同帐号多处同时登录,可以在Client2认证请求的时候发送拒绝消息,或在close掉Client1的session。    由于历史原因,XMPP之前叫Jabber,所以XMPP的帐号ID也被称为JabberID,简称JID。我们称“localpart@domainpart”为"bare JID"(裸JID),而称为"full JID"。

http://thoughtbear.iteye.com/blog/1947492


http://stackoverflow.com/questions/10731542/support-multiple-login-at-the-same-time-in-openfire-server

你可能感兴趣的:(XMPP协议中的Resource(同帐号多处登录依据))