c – ZeroMQ:带有大消息的REQ / REP

我试图通过REP套接字发送大邮件(300 MB).

有多个客户端,每个客户端通过REQ套接字连接到服务器.服务器为每个客户端创建一个专用套接字,等待请求(包含标识符)并使用ZMQ_SENDMORE分两部分发送消息:

>元数据(约1 KB)
>数据(约300 MB)

之后,REP套接字立即关闭.然后在父线程中关闭Context() – 实例.套接字的ZMQ_LINGER时间保持默认(无限).
有时会发送元数据,但不会发送图像数据.我在ZeroMQ中跟踪调用,发现在将消息数据发送到网络之前,内部(windows)套接字已关闭.我认为只要队列中有未发送的消息,zmq_term()就会阻塞.
作为一种解决方法,我将客户端更改为在收到数据作为确认后发送另一个请求消息.这很有效,但我不确定我是否解决了根本问题.
ZeroMQ版本是4.0.4.我正在使用C绑定.服务器和客户端都在Windows上运行(7和10).

最佳答案 我知道这不是你想要的答案,但我在 Linux上遇到过与ZeroMQ类似的东西.底层Linux套接字关闭,一些消息从未通过.

在我的用例中,我将服务器保持打开状态,直到用户给我一些键盘输入.这是一个黑客,但对于我的用例,它给了我想要的东西.

在关闭套接字之前,您也可以睡一两秒钟.再一次,不漂亮,但它可能是一个快速修复,直到它得到修补.

编辑添加:我也发送多部分消息,我的一个消息部分相当大(~200MB).

点赞