CoAP pub/sub 传输可靠性
CoAP pub/sub transmision reliability
我正在做一个关于 CoAP 扩展的工作,允许它使用 Publish/Subscribe 代理模型,我目前正在分析传输可靠性是如何在这里完成的。在 CoAP 中使用 CONFIRMABLE 和 NON-CONFIRMABLE 消息,以保证消息到达目的地。我的提示是,CoAP 的扩展是否依赖于此 CoAP 消息来保证传输可靠性,因为我找不到任何关于此的内容。谢谢你。
In CoAP are used CONFIRMABLE and NON-CONFIRMABLE messages, to
guarantee that a message arrived to destination.
CON 消息被重传,直到重传计数器到期或收到 ACK/RST 作为应答。这使得消息很可能到达目的地,但 "guarantee" 是另一回事。 "Cut the wire" 并且没有任何技术可以保证消息到达目的地。收到您可以信赖的 ACK,消息已到达,但如果您没有收到,您就不知道。
重传会消耗带宽,发送 "many different" 消息 ("unreliable") 与 "some" 消息 ("reliable") 的好处因应用程序而异。
该应用程序特定的决定也适用于 pubsub。我不确定,为什么 pubsub 应该因此明确提及 CON/NON 行为。
顺便提一下:
此类问题可以直接在IETF Core Mailinglist中提问。在那里您可以联系到 RFC 的作者,并且您有机会获得他们的反馈。您需要在那里注册。
CoAP 消息 不可靠,甚至不进行端到端传输——令牌、消息 ID 甚至观察号等内容在代理存在的情况下可能会发生变化。
特别是,无论在哪里使用观察(包括pub/sub),都不能保证特定的表示到达观察者; 保证(并通过作为观察的一部分定期发送的 CON 消息确保)是在长 运行 上,客户端最终具有与服务器相同的表示(也称为 "eventual consistency")。这是一个重要的功能,因为它甚至可以在拥挤的网络上运行。
举例说明,服务器可能首先发送值“14.7”,然后在 NON 中发送“14.8”,代理可以将“14.8”转发给客户端。然后服务器可能会在 CON 中接下来发送“14.9”,代理会确认这一点——但也许代理很忙,并且会稍微延迟向客户端发送通知。接下来,服务器发送“15.0”,代理立即转发。您会看到客户端从未收到“14.9”,即使它是 CON,但它确实获得了后来的值。
诚然,并非每个部署都使用代理,但这是 REST 架构设计的一部分,如果有的话,其中的所有内容都需要正常工作。
我正在做一个关于 CoAP 扩展的工作,允许它使用 Publish/Subscribe 代理模型,我目前正在分析传输可靠性是如何在这里完成的。在 CoAP 中使用 CONFIRMABLE 和 NON-CONFIRMABLE 消息,以保证消息到达目的地。我的提示是,CoAP 的扩展是否依赖于此 CoAP 消息来保证传输可靠性,因为我找不到任何关于此的内容。谢谢你。
In CoAP are used CONFIRMABLE and NON-CONFIRMABLE messages, to guarantee that a message arrived to destination.
CON 消息被重传,直到重传计数器到期或收到 ACK/RST 作为应答。这使得消息很可能到达目的地,但 "guarantee" 是另一回事。 "Cut the wire" 并且没有任何技术可以保证消息到达目的地。收到您可以信赖的 ACK,消息已到达,但如果您没有收到,您就不知道。
重传会消耗带宽,发送 "many different" 消息 ("unreliable") 与 "some" 消息 ("reliable") 的好处因应用程序而异。 该应用程序特定的决定也适用于 pubsub。我不确定,为什么 pubsub 应该因此明确提及 CON/NON 行为。
顺便提一下: 此类问题可以直接在IETF Core Mailinglist中提问。在那里您可以联系到 RFC 的作者,并且您有机会获得他们的反馈。您需要在那里注册。
CoAP 消息 不可靠,甚至不进行端到端传输——令牌、消息 ID 甚至观察号等内容在代理存在的情况下可能会发生变化。
特别是,无论在哪里使用观察(包括pub/sub),都不能保证特定的表示到达观察者; 保证(并通过作为观察的一部分定期发送的 CON 消息确保)是在长 运行 上,客户端最终具有与服务器相同的表示(也称为 "eventual consistency")。这是一个重要的功能,因为它甚至可以在拥挤的网络上运行。
举例说明,服务器可能首先发送值“14.7”,然后在 NON 中发送“14.8”,代理可以将“14.8”转发给客户端。然后服务器可能会在 CON 中接下来发送“14.9”,代理会确认这一点——但也许代理很忙,并且会稍微延迟向客户端发送通知。接下来,服务器发送“15.0”,代理立即转发。您会看到客户端从未收到“14.9”,即使它是 CON,但它确实获得了后来的值。
诚然,并非每个部署都使用代理,但这是 REST 架构设计的一部分,如果有的话,其中的所有内容都需要正常工作。