如果 TCP 已经保证帧的交付,为什么 STOMP 协议有 ACK 和 NACK?
Why STOMP protocol has ACK and NACK, if delivery of frames already guaranteed by TCP?
STOMP 似乎是一种基于套接字的通信协议,而 AFAIK 套接字始终表示 TCP。
为什么 STOMP 需要 ACK/NACK 命令来确认消息,如果它已经保证消息将在协议级别传递?
据我了解,STOMP ACK/NACK 功能实际上与传输协议(即 tcp)没有任何关系。它实际上是关于消息传递客户端以及它如何与来自代理的消息进行交互的。例如,客户端可以接收一条消息,对其进行处理,如果处理结果为 "successful",则它会确认该消息。如果处理结果是 "failure" 则它将 NACK 消息。正如 the spec 所述,当消息被 NACKed 时:
The server can then either send the message to a different client, discard it, or put it in a dead letter queue.
这允许消息传递应用程序处理潜在的错误消息以及故障客户端。
还有其他用例,但这可能是最常见和最直接的。
STOMP 似乎是一种基于套接字的通信协议,而 AFAIK 套接字始终表示 TCP。
为什么 STOMP 需要 ACK/NACK 命令来确认消息,如果它已经保证消息将在协议级别传递?
据我了解,STOMP ACK/NACK 功能实际上与传输协议(即 tcp)没有任何关系。它实际上是关于消息传递客户端以及它如何与来自代理的消息进行交互的。例如,客户端可以接收一条消息,对其进行处理,如果处理结果为 "successful",则它会确认该消息。如果处理结果是 "failure" 则它将 NACK 消息。正如 the spec 所述,当消息被 NACKed 时:
The server can then either send the message to a different client, discard it, or put it in a dead letter queue.
这允许消息传递应用程序处理潜在的错误消息以及故障客户端。
还有其他用例,但这可能是最常见和最直接的。