SimpleXMLRPCServer からサブクラス化された複数のデバイス上に多数のサーバーがあり、すべてポート 9999 で実行される傾向があります。
欲しいです:
server 0.0.0.0 9999
また:
server host=0.0.0.0 port=9999
得た:
server (*sys.argv[:1])
そして、サーバーは、順序付けのためにリッスンする間違ったインターフェイスを選択するか、基本クラスが「賢すぎる」ためにデュアルホーミングを選択します。
基本クラスは、ローカル ホストで使用可能な IP から 1 つを選択して IP を生成します。すべてのサブクラスの下位互換性を壊さずに、IP を指定するにはどうすればよいですか?
通常、各サーバーはポートを受け入れますが、常に 9999 のようです。次に、interfacelist を調べて、127.0.0.1 以外のポートを選択します。
提案: 引数が数値の場合は、ポートであると想定してください。IP の場合は、ホストと見なします。
class Server(SimpleXMLRPCServer):
def __init__(self, port=1234):
host = get_ip()
SimpleXMLRPCServer.__init__(self,addr=(host, port))
これは、SimpleXMLRPCServer のサブクラスの引数を逆にするため、奇妙な妥協のように感じます。
class Server(SimpleXMLRPCServer):
def __init__(self, port, host=None):
if host is None:
host = get_ip()
SimpleXMLRPCServer.__init__(self,addr=(host, port))
変更が 4 つのサブクラスすべてに影響する場合、私はがっかりするでしょう。顧客は変更があったことを知りませんが、デュアル ホーミングはおそらく、ポットラックの代わりに追加の引数で開始されたクラスで機能します。
サブクラスはすべてこれを行います:
class Server(SimpleXMPLRPCServer):
def __init__(self, port=1234):
host = get_ip()
SimpleXMLRPCServer.__init__(self,(host, port))
そして、main() 呼び出しは次のとおりです: Server(*sys,argv[:1])