sockets - 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 中配置哪些参数,这样我就不会丢失数据包以及我在接收器端收到的所有数据包。此外,我不知何故相信我的接收端处理可能会很慢,因此可能会发生这种情况。
请在这里写下你的想法,如果可能的话,请指导我。
解决方案
推荐阅读
- arrays - gSheet 中带有 networkdays 的 Arrayformula - 它不起作用
- react-native - 最好用什么来描述应用程序内容的样式?
- .net - 适用于所有正在运行的应用程序的 .NET 嗅探器
- powershell - Powershell列表仅匹配文件名的一部分
- jdbc - Flink JDBC Sink 和连接池
- postgresql - 在 postgresql 中保存一个 DataFrame
- mysql - VB.NET 将数据从 mysql 查询传递到 UserControl
- java - 如何在 Android emailIntent 上将图像附加到电子邮件
- java - 如何使用 lambda 将嵌套数组转换为嵌套列表?
- javascript - 使用JS放置