mte*_*sch 5 c++ sockets zeromq
我正在尝试300 MB通过REP-socket发送大消息 ( ) 。
有多个客户端,每个客户端都通过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)上运行。
我知道这不是你想要的答案,但我在 Linux 上经历了与 ZeroMQ 类似的事情。底层 Linux 套接字已关闭,某些消息从未通过。
在我的用例中,我保持服务器打开,直到用户给我一些键盘输入。这是一个黑客,但对于我的用例来说,它给了我我想要的东西。
您还可以在关闭套接字之前休眠一两秒钟。再说一次,这并不漂亮,但在这个问题得到修复之前,这可能是一个快速修复。
编辑添加:我还发送多部分消息,并且我的消息部分之一相当大(~200MB)。