【发布时间】:2015-12-14 18:48:43
【问题描述】:
我正在尝试通过 REP-socket 发送大型消息 (300 MB)。
有多个客户端,每个客户端都通过 REQ-socket 连接到服务器。服务器为每个客户端创建一个专用套接字,等待请求(包含标识符)并使用 ZMQ_SENDMORE 分两部分发送消息:
- 元数据 (~
1 KB) - 数据(~
300 MB)
之后REP-socket 立即关闭。 Context()-instance 然后在父线程中关闭。 ZMQ_LINGER 套接字的时间保留为默认值(无限)。
有时会发送元数据,但不会发送图像数据。
我跟踪 ZeroMQ 中的调用,发现内部(Windows)套接字在消息数据发送到网络之前已关闭。我认为只要队列中有未发送的消息,zmq_term() 就会阻塞。
作为一种解决方法,我将客户端更改为在接收到数据作为确认后发送另一条请求消息。这工作得很好,但我不太确定我是否已经解决了根本问题。
ZeroMQ 版本是 4.0.4。我正在使用 C++ 绑定。服务器和客户端都在 Windows(7 和 10)上运行。
【问题讨论】:
-
您对 REQ/REP 会话使用什么传输类?您可能想知道,StackOverflow 鼓励用户发布所谓的 MCVE -- a M -inimum C -omplete V - 可验证的E - 代码示例(+ 数据,必要时)重现审查中的问题。无论如何,享受这个伟大的知识社区。span>
-
您有重现问题的小样本吗?如果是这样,我鼓励您也将其发布在 zeroMQ 邮件列表中。