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> | +--------------------+--------------------+