2014-11-02 69 views
2

我正在使用ZeroRPC作为项目,其中可能有多个实例在同一台计算机上运行。出于这个原因,我需要能够自动分配未使用的端口号。我知道如何使用socket.bind(('', 0))或使用bind_to_random_port方法的ZeroMQ使用常规套接字来完成此操作,但我无法弄清楚如何在ZeroRPC中执行此操作。ZeroRPC自动分配空闲端口号

由于ZeroRPC是基于ZeroMQ的,所以它必须是可能的。

任何想法?

+0

是否确实需要端口号**随机**,或确保端口号保证与已分配的端口**不相交**数字符合您的设计需求? – user3666197 2014-11-02 18:02:19

+0

是的,你绝对正确。我想要的是自动分配空闲端口号。我相应地重新提出了这个问题。 – abp 2014-11-03 13:53:11

回答

0

已经阅读ZeroRPC-python的当前状态的详细信息,解决任务的最安全的选择是创建一个中央LotterySINGLETON,会收到< - REQ/REP - >发送下一个免费port#根据实例的要求。

该方法与使用稳定的ZeroMQ API的ZeroRPC-dev/mod(s)修改相隔离,并使您能够完全控制从LotterySINGLETON中预先配置/包含/排除的端口#-s抽签。

另一种方法是尝试绕过ZeroRPC层并直接询问ZeroMQ有关下一个随机端口的问题,但ZeroRPC文档不鼓励绕过自身控制(否则纯粹的)ZeroMQ框架元素因为它侵蚀了它的附加操作&服务的ZeroRPC层一致性,所以它在试验/错误中应该比服务“服从”而不是“挑战”...)

0

以下将让ZMQ选择一个空闲端口:

s = zerorpc.Server(SomeClass()) 
s.bind('tcp://127.0.0.1:0') 

问题wi这就是现在你不知道它绑定到哪个端口。我设法用netstat找到了端口,并成功连接到它,但这可能不是你想要做的。我提出了一个单独的问题:Find out bound ports of zerorpc server