2014-11-02 75 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