我正在阅读XEP-0124 / BOSH规范,并且不理解第9.1章请求确认中的以下句子:
唯一的例外是,在它之后 会话创建响应, 连接管理器不应该包括 任何响应中的'ack'属性if 价值将是'摆脱' 要求回复。
用我的话说:如果响应专用于最后一个请求(在连接管理器的队列中),我不应该发送ACK。
但是:有一个客户端拥有它自己的状态机。也许客户已经发送了第二个请求 - 第一个请求没有回复 - 并期望获得两个答案。在这种情况下,除了具有“较旧”请求的RID的ACK和连接管理器之外的客户端必须设置ACK。
结论:连接管理员必须设置ACK,因为允许多个请求。
我不确定,但是此文本段落仅用于客户端没有发送进一步请求但会话创建阶段成功完成且连接管理器必须向“ping”消息发送“ping”消息的用例。客户端因“等待”超时?
答案 0 :(得分:0)
所以,正如我读到的那样:
如果您收到的最高RID(按顺序)为11(之后您可能已收到14,但由于缺少12& 13,它已失序),并且您正在回复:
同样的请求,那么你不应该(建议你不要,但如果你有充分的理由,那么你可以)发送'ack'属性。
之前保留的请求(比如RID 10)那么您应该将'ack'设置为11,因为这是您目前收到的最高顺序RID。
如果客户端发送了多个请求并且服务器还不知道它们,那也没关系。这是因为当客户端发送11时,服务器可能没有保持连接,并且它将在同一连接上响应。在这种情况下,有2个请求被发送出去(11和12),但是每个请求的响应都是相同的请求,因为服务器总是有东西要立即发回。