我正在实施一种机制来检测ZeroMQ PUSH/PULL
套接字类型中的数据包丢失。
1)我想知道kvmsg是否可以用于同一个?
2)如果有任何数据包丢失,我希望客户端检测序列号中的间隙,并相应地实施重发机制。
答案 0 :(得分:1)
假设kvmsg可以处理任意消息结构,那么是的。替代方案包括Google Protocol Buffers,XML等。
通常,可以通过在您发送的消息中添加一个字段来完成此操作,也许称为“序列”。您为 PUSH
结束编写的软件将为第一条消息设置为零,为下一条消息设置为1,为每条消息增加1。 PULL
结束然后只检查序列。
然而,真正的问题是,为什么您的申请需要这个? ZMQ保证(在正常情况下)消息的传递。这就是它的全部意义。 PUSH/PULL
表示只有一个PULLer会收到PUSHed消息。如果您有一个 PUSH
和一个 PULL
,则每个PUSHed邮件都会以正确的顺序发送,而不会丢失给PULLer,除非是灾难性的网络故障。 AFAIK它甚至可以为您处理临时网络问题,管理重新连接等,并仍以正确的顺序发送消息。
由于PUSH
端的传出队列已满而无法发送的邮件将导致 zmq_send()
返回错误,因此PUSH
结束已经知道没有发送消息。
应用程序还有其他更复杂的东西吗?