xmpp協議設計中引入了乙個抽象的資源繫結過程,何為資源,如何繫結?
首先這得從jid的格式設計說起,jid是xmpp前身jabber協議id的簡寫,用於唯一標識乙個客戶身份。乙個合法的 jid 包括一組排列好的元素,包括網域名稱(domain identifier),節點名(node identifier),和資源名(resource identifier),如下:
jid = [ node "@" ] domain [ "/" resource ]
,所有 jid 都是基於上述的結構,類似 這種結構。
node:是對使用者的抽象,既可以代表乙個真實的使用者,也能表示乙個虛擬使用者如乙個聊天室等。
domain:表達了客戶所連線的伺服器,在實踐中通常表示乙個特定的集群,由同一domain來表示。
resource:
它通常表示乙個特定的會話,連線。
對於伺服器和和其他客戶端來說,資源名是不透明的。
資源名的獲得需要經歷乙個資源繫結的過程,這個過程按照xmpp協議約定是在sasl握手完成後,由客戶端重新發起初始化流請求後。
伺服器向客戶端宣告資源繫結特性,過程如下:
[html]view plain
copy
<
stream:stream
xmlns
='jabber:client'
xmlns:stream
=''id=
'c2s_345'
from
='example.com'
version
='1.0'
>
<
stream:features
>
<
bind
xmlns
='urn:ietf:params:xml:ns:xmpp-bind'
/>
stream:features
>
客戶端發起資源繫結請求,並指定乙個繫結的資源名
[html]view plain
copy
<
iqtype
='set'id=
'bind_2'
>
<
bind
xmlns
='urn:ietf:params:xml:ns:xmpp-bind'
>
<
resource
>
pc-win-someone
resource
>
bind
>
iq>
服務端響應資源繫結請求,並返回繫結後的full jid名
以上過程即完成了資源繫結,那麼資源繫結有什麼作用呢,注意檢視協議xml中客戶端端請求繫結資源名為pc-win-someone,通常實現中可考慮用客戶端的平台相關標識,例如 pc-win標示pc下的windows平台等,標識連線客戶端的平台和自身名稱,但xmpp協議約定resource由服務端按照每客戶端生成隨機值,用於唯一標識乙個客戶端一次連線會話。因此服務端的實現在客戶端請求資源名後新增了隨機生成的唯一字尾,用於區分不同的客戶端連線。
span
>
span
>
span
>
p>
<
p>
<
span
style
="font-family:sans-serif"
>
<
span
style
="line-height:19px"
>
<
span
style
="font-size:12px"
>
那麼如此設計的目的何在?
span
>
span
>
span
>
p>
<
p>
<
span
style
="font-size:12px"
>
<
span
style
="font-family:sans-serif"
>
<
span
style
="line-height:19px"
>
span
>
span
>
<
span
style
="line-height:19px; font-family:sans-serif"
>
span
>
span
>
p>
<
p>
<
span
style
="font-family:sans-serif"
>
<
span
style
="line-height:19px"
>
<
span
style
="font-size:12px"
>
通過使用者id形成一對多的使用者接入對映,方便獲得同一賬號的多個接入資訊,可靈活的設計多點登陸時使用者的自選策略(是否踢下其他登陸、或選擇最近登陸接收訊息等)。
span
>
span
>
span
>
p>
<
pre>
pre>
<
pre>
pre>
<
pre>
pre>
<
pre>
pre>
<
pre>
pre>
<
pre>
pre>
<
pre>
pre>
<
pre>
pre>
IM設計思考 XMPP資源繫結
xmpp協議設計中引入了乙個抽象的資源繫結過程,何為資源,如何繫結?首先這得從jid的格式設計說起,jid是xmpp前身jabber協議id的簡寫,用於唯一標識乙個客戶身份。乙個合法的 jid 包括一組排列好的元素,包括網域名稱 domain identifier 節點名 node identifi...
IM設計思考 XMPP資源繫結
xmpp協議設計中引入了乙個抽象的資源繫結過程,何為資源,如何繫結?首先這得從jid的格式設計說起,jid是xmpp前身jabber協議id的簡寫,用於唯一標識乙個客戶身份。乙個合法的 jid 包括一組排列好的元素,包括網域名稱 domain identifier 節點名 node identifi...
思考詳細設計
新一篇 思考詳細設計 maillist中的討論 ai92 2006 8 2 設計在軟體開發中扮演的角色,相信大家都很清楚。設計的好壞直接影響著軟體產出的質量。設計一般分為架構設計 概要設計 和詳細設計。架構設計主要從系統整體上來考慮使用什麼樣的架構 如何劃分模組以及制定模組間的通訊規則。因此架構設計...