zeromq中的router/dealer模式在多线程下的无法收到消息?

发布于 2022-08-29 19:19:51 字数 674 浏览 19 评论 0

期待熟悉zeromq的前辈。

在zeromq的guide里,它用router/dealer模式做了一个broker
shared queue

client对应ZMQ_REQ类型的zmq_socket
worker对应ZMQ_REP类型的zmq_socket
broker创建一个router和一个dealer,router接受client的消息并转发给worker,worker再把处理结果发送给dealer,dealer再转发给client.

然后我尝试把这个代码做一个变换,由多进程改为多线程,代码如下:
https://gist.github.com/ichenq/61fc280e153313e2d828

可是broker收到client的消息后,却无法发送给worker,不知道是什么原因?
或者不知道我的代码里哪个API没有用对?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

倾城°AllureLove 2022-09-05 19:19:51

2小时后自问自答。

的确是自己代码的问题, create_broker函数里传递给zmq_msg_send的参数ZMQ_SNDMORE写成了ZMQ_MORE。
现在gist已经更新。

用tcp可以做多进城,同样的代码用inproc改为就可以做多线程了。

还有一个要说明的就是,zmq socket在bind的时候没有域名解析,只能选定IP地址或者*号(不能用localhost),但是在connet的时候却是要做域名解析的,可以不用指定IP

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文