加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 07:14:47 所属栏目:百科 来源:网络整理
导读:我试图通过REP套接字发送大邮件(300 MB). 有多个客户端,每个客户端通过REQ套接字连接到服务器.服务器为每个客户端创建一个专用套接字,等待请求(包含标识符)并使用ZMQ_SENDMORE分两部分发送消息: 元数据(约1 KB) 数据(约300 MB) 之后,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).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读