我正在将ZeroRPC用于一个项目,其中可能有多个实例在同一台机器上运行。因此,我需要能够自动分配未使用的端口号。我知道如何使用socket.bind(('', 0))
使用常规套接字或使用bind_to_random_port
方法使用ZeroMQ来完成此操作,但我无法弄清楚如何使用ZeroRPC执行此操作。
由于ZeroRPC基于ZeroMQ,因此必须是可能的。
有什么想法吗?
答案 0 :(得分:0)
阅读有关ZeroRPC-python当前状态的详细信息后,解决任务的最安全选项是创建一个中心 LotterySINGLETON
,它将收到&lt; - {{ 1}} 强> / <强> REQ
强> - &GT;根据实例的请求发送下一个免费REP
。
此方法与使用其他稳定的ZeroMQ API的ZeroRPC-dev / mod(s)修改隔离,并使您可以完全控制预先配置/包含在/排除在{{ 1}}的绘画。
另一种方法是试图绕过ZeroRPC层并直接向ZeroMQ询问下一个随机端口,但ZeroRPC文档不鼓励绕过他们自己对(纯粹的)ZeroMQ框架元素的控制(这是非常合理地强调,因为它会削弱其附加操作和服务的ZeroRPC层一致性,所以它应该在试用/错误中“服从”而不是“挑战”......)
答案 1 :(得分:0)
以下内容将让ZMQ选择一个免费端口:
s = zerorpc.Server(SomeClass())
s.bind('tcp://127.0.0.1:0')
问题在于现在你不知道它绑定到哪个端口。我设法找到了netstat并成功连接到它的端口,但这可能不是你想要做的。我提出了一个单独的问题:Find out bound ports of zerorpc server