gpt4 book ai didi

python - 适用于通信进程的 Zmq 消息模式

转载 作者:太空宇宙 更新时间:2023-11-03 17:21:39 31 4
gpt4 key购买 nike

我正在使用pyzmq库在同一台机器上的两个Python进程之间建立通信。查看 ZMQ 提供的可用消息传递模式,并不清楚哪一种适合。
在我的情况下,两个进程都需要在某些随机时间独立地向彼此发送消息。基本上,在不同时刻,每个进程既是客户端又是服务器。下面是一些视觉描述。 enter image description here

为了实现此模式,我使用两个 ZMQ.PAIR 套接字。每个进程 .bind() -s 一个要在其上接收的套接字,.connect() -s 到每当需要时,都会使用.send()
同样,每个都有一个专用线程来处理接收,这是阻塞的。

但是,这种设计在我看来有点像拉伸(stretch),我想知道是否有更自然、更适合这种场景的设置?我也想这一定很常见。在当前的设计中,我也不喜欢在进程完成时需要手动清理两个套接字。

最佳答案

如果节点实际上是相同的(至少就它们如何看待彼此进行通信而言,即对于其他“临时”客户端来说没有真正的“可靠”服务器),那么您有两个选择:

(A) 启动两对套接字,一对将一个节点视为服务器,另一对视为客户端,另一对则反转这种关系。

如果节点之间的通信遵循严格的模式,例如,这可能是合适的。一个节点发起通信,并且会发生特定的来回,直到该特定对话结束。这允许每个节点独立发起通信并保持自己的通信节奏,而不会与其他节点发起的“串扰”混淆。

如果有一天可能有两个以上的节点,那么这也更合适,以创建一个星形拓扑,其中每个节点都可以直接与其他节点通信。它可以合理地工作的节点数量是有限的,超过这个限度,您将需要实现某种中央代理。

(B) 只需选择一个节点作为“服务器”,另一个节点作为“客户端”,bind()connect() 适本地,然后平等地对待他们

这听起来最像您正在寻找的内容。您不需要过度关心哪一方bind()和哪一方connect()。目前,听起来好像您每次需要通信时都在打开和关闭连接。您应该考虑在进程的生命周期中保持连接打开。您使用的 PAIR 套接字支持完全非结构化的通信,因此您可以随意从任一方向发送和接收,无论您将哪一侧指定为“服务器”以及将哪一侧指定为“服务器”客户”。

关于python - 适用于通信进程的 Zmq 消息模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33081725/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com