XMPP协议中的XMLStream和XMLStanza

       XMLStream可以理解为XMPP内容在不同实体(如client、server)之间传递的容器,XMLStream开始于<stream>标签,结束于</stream>标签,在生命周期中,可传递不限量的XMPP内容。

      XMLStanza是被传递的XMPP内容的基本形式,它可以这样定义:1.在</stream>的子层(深度=1);2.元素名称为message、presence或iq(被包含在<message/>、<presence/>或<iq>);3.名字空间为jabber:client 或 jabber:server,这3个条件都满足的话即为XMLStanza。

      message为消息, presence为在线状态(在线/离线/可以聊天……),iq表示Info/Query(一去一回)。

      之间关系显然,实际情况一般如此:

      1.建立XMLStream。

      2.通过传递stream完成前期信息交换及认证。

      3.传递XMLStanza。

         ……

         关闭XMLStream。

      交互过程如下示意图:

+--------------------+--------------------+
| INITIAL STREAM     |  RESPONSE STREAM   |
+--------------------+--------------------+
| <stream>           |                    |
|--------------------|--------------------|
|                    | <stream>           |
|--------------------|--------------------|
| <presence>         |                    |
|   <show/>          |                    |
| </presence>        |                    |
|--------------------|--------------------|
| <message to='foo'> |                    |
|   <body/>          |                    |
| </message>         |                    |
|--------------------|--------------------|
| <iq to='bar'       |                    |
|     type='get'>    |                    |
|   <query/>         |                    |
| </iq>              |                    |
|--------------------|--------------------|
|                    | <iq from='bar'     |
|                    |     type='result'> |
|                    |   <query/>         |
|                    | </iq>              |
|--------------------|--------------------|
| [ ... ]            |                    |
|--------------------|--------------------|
|                    | [ ... ]            |
|--------------------|--------------------|
| </stream>          |                    |
|--------------------|--------------------|
|                    | </stream>          |
+--------------------+--------------------+

猜你喜欢

转载自thoughtbear.iteye.com/blog/1947221