XEP-0124 / BOSH:在响应中省略 ACK

Posted

技术标签:

【中文标题】XEP-0124 / BOSH:在响应中省略 ACK【英文标题】:XEP-0124 / BOSH: Omit ACK in response 【发布时间】:2011-02-15 13:34:44 【问题描述】:

我正在阅读XEP-0124 / BOSH 规范,但不理解第 9.1 章请求确认中的以下句子

唯一的例外是,在它之后 会话创建响应, 连接管理器不应该包括 任何响应中的“ack”属性,如果 该值将是 请求得到响应。

用我的话来说:如果响应专用于最后一个也是唯一的请求(在连接管理器的队列中),我不应该发送 ACK。

但是:有一个客户端有它自己的状态机。也许客户端已经发送了第二个请求——第一个请求没有得到回复——并期望得到两个答案。在这种情况下,除了带有“旧”请求的 RID 的 ACK 之外的客户端和连接管理器必须设置 ACK。

结论:只要允许多个请求,连接管理器必须设置 ACK。

我不确定,但此文本段落是否专用于客户端未发送进一步请求但会话创建阶段已成功完成且连接管理器必须向客户端发送“ping”消息的用例客户端由于“等待”超时?

【问题讨论】:

【参考方案1】:

所以,当我读到它时:

如果您收到的最高 RID(按顺序)是 11(之后您可能收到了 14,但由于缺少 12 和 13,所以它不按顺序),并且您正在响应:

    同样的请求,那么你不应该(建议你不要,但如果你有充分的理由,那么你可以)发送一个'ack'属性。

    较早持有的请求(例如 RID 10),那么您应该将 'ack' 设置为 11,因为这是您迄今为止收到的最高顺序 RID。

如果客户端发送了多个请求而服务器还不知道它们,那也没关系。这是因为当客户端发送 11 时,服务器有可能没有保持连接,它会在同一连接上做出响应。在这种情况下,发送了 2 个请求(11 和 12),但每个请求的响应都确认相同的请求,因为服务器总是有东西要立即发回。

【讨论】:

以上是关于XEP-0124 / BOSH:在响应中省略 ACK的主要内容,如果未能解决你的问题,请参考以下文章

哪些特定用例需要 BOSH over WebSockets 和长轮询? [关闭]

如何在 Spring Boot 中从端点响应中全局省略空 xml 标记?

可以使用 Strophe 在 java(jvm) 上与 Bosh Manager 建立 Bosh 连接吗?

Bosh 使用 openfire 设置

如何从服务器端 Java 应用程序发送 XMPP 通知?

gloox 是不是通过 BOSH 支持 BOSH 和 XMPP?