multithreading - 使用 ZeroMQ 套接字时,我可以从一个线程发送()并从另一个线程接收()到同一个套接字吗?

标签 multithreading sockets zeromq send recv

我找到了question !之前,但如果我需要通过使用 ROUTER 到 DEALER 套接字来构建异步客户端/服务器,我仍然不知道该怎么做。

在使用zeromq之前,当我需要构建异步服务器时,我会将套接字的读取部分和写入部分分开。

[dispatch] worker 将epoll_wait套接字的读取事件并启动[worker]线程根据消息做一些工作,

最后,将在同一套接字的某个不同线程中触发 .send() 操作。

读取和发送可以分开在两个不同的线程中。

2 个不同线程中的一个套接字的接收和发送

使用 Zeromq 套接字是否可能(允许)?

实际上我搜索了一些邮件列表并得到了否定的答案。

那么我想知道如何处理这种情况?

如果一个socket只能使用一个线程,如何提高整个服务器的并行度和吞吐量?

最佳答案

ZeroMQ 布道提倡“零共享==不要共享任何东西*”

人们应该读到它不共享socket(更准确地说是a-ZMQ-socket access-point-object),所以正确,您不得将代码设计为在多个线程之间“共享”任何套接字。

这并不意味着两个不同的线程或分布式进程不能通过单个 ZMQ 套接字相互监听/对话,这是在它们之间设置的(一个 .bind()-s,其他.connect() )。

所以你的[ROUTER]-<__behavioralArchetypePRIMITIVE_>可以.bind()将其输出到同一个ZMQ-socket 对象,发布该对象以通过 [DEALER] 在另一端获取 .connect()-ed-<__behavioralArchetypePRIMITIVE_>(如图 27 Extended REQ / ROUTER | DEALER / REP Pattern 所示)并完成工作。

*) 注意:

零共享规则有一个主要异常(exception),其中 ZMQ Context 实例可能会在某些本地主机线程之间有意共享。

关于multithreading - 使用 ZeroMQ 套接字时,我可以从一个线程发送()并从另一个线程接收()到同一个套接字吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26019970/

相关文章:

c++ - 在 C++11 中使用 futures、async 和 thread 实现搜索

尽管运行代码来显示菜单,Java 小程序仍显示白屏

javascript - 意外 token : io. 监听(服务器)

c - 您是否需要额外的 socket 来进行三向通信?

sockets - ZeroMQ 设计决策

c++ - 为什么一个子线程的执行时间比整个应用程序的执行时间多

multithreading - 防止Tomcat中的线程阻塞

Java readline() 保持套接字打开

python-3.x - 带有代理 : How to improve number of frames per second 的 PUB-SUB 网络

c++ - 如何正确理解ZeroMQ的ZMQ_RCVHWM选项?