我正在学习ZeroMQ模式,我需要实现以下内容:
NodeJS将向多个python线程发送消息,但不需要同步等待答案,可以按任意顺序。我知道发布/订阅模式以一种方式解决它:它可以发送给很多人,但是python worker如何发送回复?
另外,为了让python线程接收消息,这是更好的设计:python进程接收消息并发送到相应的线程(不知道怎么做),或者每个线程负责收到自己的消息?
答案 0 :(得分:0)
对于双向通信,没有义务使用单个套接字。两个完全没问题。
这意味着您可以让PUB / SUB从NodeJS广播到您的Python代码。这很容易。然后以另一种方式返回一个单独的PUSH / PULL套接字 - Python执行推送,NodeJS执行拉动。每个Python线程一个PUSH套接字,NodeJS中只有一个PULL套接字(它将从任何推送套接字中拉出)。因此,只要其中一个Python线程想要向NodeJS发送内容,它就会通过PUSH套接字发送它。
AFAIK NodeJS可以“绑定”它的PULL套接字,Python可以“连接”它的PUSH套接字,如果想要感觉NodeJS是“服务器”,这是你可以做的事情。虽然这是不必要的 - 只要另一端连接,任何一端都可以绑定。请记住,ZeroMQ是Actor模型编程;没有客户端或服务器,只有演员。 “绑定”和“连接”只是被提及,因为它们都是在tcp(或类似的)之上实现的,而且必须告诉谁绑定和连接的是tcp传输。
让每个线程负责自己的套接字。虽然假设Python线程不是真正的线程,你不会通过拥有它们来获得加速(除非他们已经离开并且从我上次查看以来摆脱了全局解释器锁定)。 ZeroMQ上下文本身设置了一个线程,它在后台编组所有实际的消息传输,因此IO已经显着重叠。