2

twisted のアプリケーション フレームワークを使用するプロキシ サーバーを作成しました。コアでは、DHT を使用して問題を解決します。DHT クライアントの起動には数秒かかるため、DHT の準備が整った後にのみプロキシが接続を受け入れるようにしたいと考えています。

# there is a class like 
class EntangledDHT(object):
    # connects to the dht

# create the client
dht = EntangledDHT.from_config(config)

# when it can be used this deferred fires
# i want to wait for this before creating the "real" application
dht.ready


# the proxy server, it uses the dht client
port = config.getint(section, 'port')

p = CosipProxy(host=config.get(section, 'listen'),
               port=port,
               dht=dht,
               domain=config.get(section, 'domain'))


## for twistd
application = service.Application('cosip')

serv = internet.UDPServer(port, p)
serv.setServiceParent(service.IService(application))

EntangledDHTを、サービスを開始する前に Twisted が待機するある種のサービスにするにはどうすればよいCosipProxyですか? 私のためにこれを行うツイストのメカニズムはありますか? またはdht.ready、アプリケーションの残りの部分を作成するコールバックを追加する必要がありますか? ありがとう

4

1 に答える 1

2

serv.setServiceParent(service.IService(application))すぐに電話しないでください。代わりに、 へのコールバックでそれを呼び出すのを待ちますdht.ready。これにより、アプリケーション サービスが既に実行されている場合に開始されます。

また、それdht自体がIService. そのはず; というよりは、from_config明らかにfrom_configいくつかの接続を開始するため、呼び出すものはサービスである必要があります (少なくとも、dht.readyこの例では、 が起動する場合はそのように見えます)。プラグインまたは tac ファイルは、サービスを開始するのではなく、サービスを構築する必要があります。それが最初に呼び出されるまで、何も起こらないはずです。startService

于 2010-11-18T19:50:06.663 に答える