xmpp介绍与RFC3920学习(2)
时间:2010-04-02 来源:zlm8715
xmpp介绍与RFC3920学习(2)
1 XML Streams
两个基本定义
a, XML streams(XML流) : 是在网络上两个实体交换XML元素的容器。以XML开始标签<stream>开始,以XML结束标签<stream>终止。在流的生命周期里,实体可以发送大量的XML元素。包括用于协商流的元素或XML stanzas 。
b, XML Stanza(XML节): 是一个在XML流上从一个实体发往另一个实体的不连续的语意单元。XML节是根节点<stream/>的直接子节点。仅有的XML节是<message/> <presence/> <iq/> 考虑一个客户端和服务器会话的例子,为了连接服务器,客户端必须通过发送一个开始标签<stream>初始化XML流,可选的XML版本声明和字符编码支持。服务器端应当响应一个XML流到客户端。一旦客户端完成SASL协商,客户端可以在流上发送大量的XML节,要关闭流,只需发送关闭标签</stream>,客户端和服务器将终止下层的TCP连接。
XML流可以当作是所有XML节的信封。可以示例如下: |--------------------|
| <stream> |
|--------------------|
| <presence> |
| <show/> |
| </presence> |
|--------------------|
| <message to='foo'> |
| <body/> |
| </message> |
|--------------------|
| <iq to='bar'> |
| <query/> |
| </iq> |
|--------------------|
| ... |
|--------------------|
| </stream> |
|--------------------|
2 Binding to TCP(绑定到TCP)
在客户端与服务器的通讯中,服务器必须允许客户端共享一个连接,这个连接可以从客户端到服务器发送XML节,也可以从服务器到客户端发送XML节。在服务器之间通讯中,必须有两个TCP连接 3 Stream Attributes(流属性) initiating entity(开始实体):会话发起的实体,通常是client.
receiving entity(接受实体):会话的另一方,通常是Server. 流节点有下列属性:
a,to: 应当仅用于在(initiating entity)开始实体到(receiving entity)接受实体XML流的头部,必须是接受实体的主机名。在接受实体到开始实体的流头部,to属性不应当设置,如果包括to属性,开始实体应当默默忽略。 b,from: 应当仅用于从"receiving entity"到"initiation entity"实体的XML流的头部。必须设置为接受实体的主机名。在开始实体到接受实体的流头部,from属性不应当设置,如果包括from属性,接受实体应当默默忽略。 c,id: 应当仅使用于"receiving entity"到"initiating entity"的XML流的头部,这个属性是接受实体创建的一个session关键字,必须在接受实体应用程序一方(通常是服务器)是唯一的。流ID是临界安全的,所以必须是不可重复和不可预料的。在开始实体到接受实体的流头部,id属性不应当设置,如果包括id属性,接受实体应当默默忽略。 d,xml:lang: 应当包含在开始实体的初始化流头部,来指定在流上的默认语言。如果指定了这个值,接受实体应当记住这个值,并作为初始化流和响应流的默认值。如果没有包括这个属性,接受实体应当为两个流使用配置的默认值,必须包含在响应流的头部。如果开始实体包括'xml:lang'属性,接受实体不能修改或删除它。 f, version: 最少为"1.0"
总结如下: | initiating to receiving | receiving to initiating
---------+---------------------------+-----------------------
to | hostname of receiver | silently ignored
from | silently ignored | hostname of receiver
id | silently ignored | session key
xml:lang | default language | default language
version | signals XMPP 1.0 support | signals XMPP 1.0 support
a, XML streams(XML流) : 是在网络上两个实体交换XML元素的容器。以XML开始标签<stream>开始,以XML结束标签<stream>终止。在流的生命周期里,实体可以发送大量的XML元素。包括用于协商流的元素或XML stanzas 。
b, XML Stanza(XML节): 是一个在XML流上从一个实体发往另一个实体的不连续的语意单元。XML节是根节点<stream/>的直接子节点。仅有的XML节是<message/> <presence/> <iq/> 考虑一个客户端和服务器会话的例子,为了连接服务器,客户端必须通过发送一个开始标签<stream>初始化XML流,可选的XML版本声明和字符编码支持。服务器端应当响应一个XML流到客户端。一旦客户端完成SASL协商,客户端可以在流上发送大量的XML节,要关闭流,只需发送关闭标签</stream>,客户端和服务器将终止下层的TCP连接。
XML流可以当作是所有XML节的信封。可以示例如下: |--------------------|
| <stream> |
|--------------------|
| <presence> |
| <show/> |
| </presence> |
|--------------------|
| <message to='foo'> |
| <body/> |
| </message> |
|--------------------|
| <iq to='bar'> |
| <query/> |
| </iq> |
|--------------------|
| ... |
|--------------------|
| </stream> |
|--------------------|
2 Binding to TCP(绑定到TCP)
在客户端与服务器的通讯中,服务器必须允许客户端共享一个连接,这个连接可以从客户端到服务器发送XML节,也可以从服务器到客户端发送XML节。在服务器之间通讯中,必须有两个TCP连接 3 Stream Attributes(流属性) initiating entity(开始实体):会话发起的实体,通常是client.
receiving entity(接受实体):会话的另一方,通常是Server. 流节点有下列属性:
a,to: 应当仅用于在(initiating entity)开始实体到(receiving entity)接受实体XML流的头部,必须是接受实体的主机名。在接受实体到开始实体的流头部,to属性不应当设置,如果包括to属性,开始实体应当默默忽略。 b,from: 应当仅用于从"receiving entity"到"initiation entity"实体的XML流的头部。必须设置为接受实体的主机名。在开始实体到接受实体的流头部,from属性不应当设置,如果包括from属性,接受实体应当默默忽略。 c,id: 应当仅使用于"receiving entity"到"initiating entity"的XML流的头部,这个属性是接受实体创建的一个session关键字,必须在接受实体应用程序一方(通常是服务器)是唯一的。流ID是临界安全的,所以必须是不可重复和不可预料的。在开始实体到接受实体的流头部,id属性不应当设置,如果包括id属性,接受实体应当默默忽略。 d,xml:lang: 应当包含在开始实体的初始化流头部,来指定在流上的默认语言。如果指定了这个值,接受实体应当记住这个值,并作为初始化流和响应流的默认值。如果没有包括这个属性,接受实体应当为两个流使用配置的默认值,必须包含在响应流的头部。如果开始实体包括'xml:lang'属性,接受实体不能修改或删除它。 f, version: 最少为"1.0"
总结如下: | initiating to receiving | receiving to initiating
---------+---------------------------+-----------------------
to | hostname of receiver | silently ignored
from | silently ignored | hostname of receiver
id | silently ignored | session key
xml:lang | default language | default language
version | signals XMPP 1.0 support | signals XMPP 1.0 support
相关阅读 更多 +