我想知道如果消息是通过质量差的链接传递的,ZeroMQ的行为如何,例如一个非常不稳定的低级别串行连接,可能会丢弃单个字节。
当然在这种情况下,受影响的邮件会丢失,但ZeroMQ能否在下一条邮件中恢复?在任何情况下都会重新开始吗?
谢谢!
答案 0 :(得分:0)
连接可靠性主要是TCP协议的责任 - 如果套接字认为它已连接,则消息正在通过。如果数据包丢失,则TCP检测到并尝试重新传输它们(see here以获取更多信息)。这一切都发生了#34;免费"就ZMQ而言,任何使用TCP的连接类型都会以相同的方式运行。
当TCP连接丢失时,如果连接非常不可靠并且在TCP重复尝试后消息永远不会通过,那么可能会发生这种情况,那么ZMQ会添加另一个,在此基础上分离可靠性层,允许您的应用程序重新连接。
在此中断期间,原始或后续消息会发生什么情况取决于您选择的ZMQ插槽类型。某些套接字类型会丢弃消息,某些套接字类型会将其排如果消息已经在传输中,它可能会丢失,因为发送套接字放弃了对它的控制。
通常,如果您希望在邮件传递方面具有绝对的可靠性,那么您将自己在自己的应用程序中自行编写,并自行确认已收到邮件。在大多数情况下,需要的东西少于完全可靠性,您只需依靠TCP和ZMQ来完成工作。如果您如此专注于性能,即使TCP的可靠性会使您减慢太多,而您只是丢弃该数据并继续前进,您将需要使用UDP - I&#39 ;听说有人使用UDP与ZMQ,但我还没有尝试过,我不相信它全面支持。