将绑定的 ZMQ 套接字移动到另一个进程

Moving a bound ZMQ socket to another process

我有一个 Python 程序,它生成其他几个 Python 程序作为子进程。这些子进程之一应该打开并绑定 ZMQ 发布者套接字,以便其他子进程可以订阅它。

我无法保证哪些 tcp 端口可用,因此当我绑定到子进程中的随机端口时,我的主程序将不知道要告诉其他子进程什么。

有没有办法在主进程中绑定套接字,然后以某种方式将套接字传递给我的子进程?还是其他一些预注册套接字的方法或将端口信息从子进程传回我的主进程的标准方法(stdout 和 stderr 已被其他数据使用)?

仅检查主进程中的空闲端口并将其传递给子进程并不是最佳选择,因为如果同时分配套接字,这仍然可能失败。另外,由于我的程序应该在 Unix 和 Windows 上运行,所以我不能真正使用 ipc 套接字,否则它会解决我的问题。

最简单的方法是为端口池管理器创建逻辑
(避免尝试将 ZeroMQ 套接字共享/传递给其他进程/在其他进程之间)

人们可能会创建一个持久的、先验已知的、基于tcp://A.B.C.D:8765-传输-class的.bind() 访问点,作为端口分配服务暴露给所有客户端进程,客户端进程 .connect(),需要以任何方式握手以证明identity/credentials/purpose/etc 和 .recv() 以协调的方式一个实际空闲的 messaging/signalling-service 端口号,即系统范围内保证当前不会使用/ 直到返回到端口管理器(一个旋转的端口池在您的代码控制下集中管理,而所有套接字,在分布式进程/线程中本地创建 .connect() / .bind()-ing到池管理器宣布的端口号,因此将仍然存在,并且应该始终保持在 ZeroMQ 建议内,而不是本身共享)。