ZeroMQ:我可以使用kvmsg类为消息添加序列号吗?如果有,怎么样?

时间:2017-05-30 16:59:18

标签: zeromq

我正在实施一种机制来检测ZeroMQ PUSH/PULL 套接字类型中的数据包丢失。
1)我想知道kvmsg是否可以用于同一个?
2)如果有任何数据包丢失,我希望客户端检测序列号中的间隙,并相应地实施重发机制。

1 个答案:

答案 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结束已经知道没有发送消息。

应用程序还有其他更复杂的东西吗?