首页 > 解决方案 > Zmq_Push 和 Zmq_Pull 连接丢包

问题描述

我正在做一个项目,其中我有多个推式套接字(动态创建)连接到一个拉式套接字。在这里,每个推式套接字向拉式套接字发送一种独特的数据,每个消息的数据大小小于 1000 字节,每个推式套接字最多发送 20,000 到 30,0000 条此类消息。在峰值负载期间,推送套接字的数量可以扩展到 100 个。因此,这里有 100 个推送套接字连接到一个 PULL 接收器,每个推送套接字发送 20-30K 大小接近 1000 字节的消息。现在,在 PULL 端接收器上,我处理这些每个唯一的数据包并将其放入相应的队列中,例如:如果我有 50 个 PUSH 套接字发送数据,那么在接收器端将有 50 个队列处理数据。这是必需的,因为每个队列都拥有需要唯一处理的唯一数据集。这里,

在这里,我面临的问题是有时我看到我没有收到 PUSH 套接字发送的所有数据。我相信我发生了一些数据丢失。为了控制这一点,我在两侧都设置了 HWM。我尝试了以下组合:1)SNDHWM 设置为 100,RCVHWM 设置为 100 2)SNDHWM 设置为 10,RCVHWM 设置为 10 3)SNDHWM 设置为 10,RCVHWM 设置为 100

除了上述配置之外,我还将发送方的上下文线程设置为 3,接收方的上下文线程设置为 1。这里,在发送方只有一个上下文创建,从该上下文中动态创建多个推送套接字,如数据接收。

但是,在所有这些组合中,我发现仍然缺少一些数据包。

有人可以指导我在 ZMQ 中配置哪些参数,这样我就不会丢失数据包以及我在接收器端收到的所有数据包。此外,我不知何故相信我的接收端处理可能会很慢,因此可能会发生这种情况。

请在这里写下你的想法,如果可能的话,请指导我。

标签: socketszeromq

解决方案


推荐阅读