XMPP中Stanza ID的用途是什么



有人能解释一下ID在一些XMPP XML请求中的作用吗(谈论核心XMPP)?

例如,我可以通过发送以下请求来获取花名册:

<iq type="get">
<query xmlns="jabber:iq:roster"></query>
</iq>

但我也可以通过添加一个随机ID:来获取它

<iq type="get" id="2346543">
<query xmlns="jabber:iq:roster"></query>
</iq>

我为什么应该或不应该使用身份证有什么原因吗?是否与安全相关?有什么缺点吗?ID的约定是什么?它们应该如何构建?

我建议简单地查看协议规范。RFC 6120§8.1.3。id很好地解释了这一点IMHO:

发起实体使用"id"属性来跟踪它可能从另一个实体(如中间服务器
或预期收件人)收到的与
生成的节相关的任何
响应或错误节。

"id">
属性的值是仅在其当前流中唯一,还是在全局范围内唯一,这取决于发起实体。

对于<消息/>并且<存在/>节,建议
始发实体包含"id"属性;对于<iq/>节,
它是必需的。

如果生成的节包括"id"属性,则
响应或错误节也需要包含"id">
属性,其中"id"特性的值必须与生成的节的值相匹配。

并不是说你的例子显示了一个没有"id"属性集的IQ节实际上是无效的。

当您发送带有type="get">type="set"ype="result">和相同id 的响应

因此,这只是通过id来匹配对他们请求的响应。

例如,

获取花名册:

<iq type="get" id="2346543">
<query xmlns="jabber:iq:roster"></query>
</iq>

响应:

<iq to='icq.exampel.com' from='juliet@example.com' type='result' id='2346543'>
<query xmlns='jabber:iq:roster'>
<item jid='123456789@icq.example.com'
name='Romeo'
subscription='both'>
<group>Friends</group>
</item>
<item jid='554323654@icq.example.com'
name='Mercutio'
subscription='from'>
<group>Friends</group>
</item>
<item jid='997665667@icq.example.com'
name='Benvolio'
subscription='both'>
<group>Friends</group>
</item>
</query>
</iq>

它们包含相同的id,所以你知道这个响应是针对什么请求的

最新更新