2010-11-18 5 views
2

ツイストアプリケーションフレームワークを使用するプロキシサーバーを作成しました。その中核となるのは、DHTを使って物事を解決することです。 DHTクライアントの起動には数秒かかるので、DHTの準備が整った後にプロキシが接続を受け付けるようにしたい。私はツイストがCosipProxyサービスを開始する前に待機しますサービスのいくつかの種類にEntangledDHTを有効にするにはどうすればよい別のサービスを開始する前にツイスターサービスが開始されるのを待つ

# 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)) 

?私のためにこれを行うねじれのメカニズムはありますか?または、残りのアプリケーションを作成するコールバックをdht.readyに追加する必要がありますか?ありがとう

答えて

2

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

また、dht自体はIServiceのようには見えません。そのはず;か、from_configを呼び出す事が明らかにfrom_configは(少なくとも、それはdht.readyが今までこの例では、火災に起こっている場合、それは、次のようになります。)いくつかの接続をキックオフする予定されているので、サービスでなければなりません。あなたのプラグインまたはtacファイルはサービスではなく、サービスである必要があります。最初にstartServiceが呼び出されるまでは何も起こりません。

+0

申し訳ありません私はしばらくのうちに返信しなかった、私はこれに取り組む時間がなかった。 'EntangledDHT'をIServiceに向けると、obhectが作成されたときではなく、' startService'の中でネットワークに接続するだけです。私が使っているライブラリ(エンタングルされている)は、このクラスのプロトコルクラスも 'twisted.internet.reactor.listenUDP(..)'を定義しているので、これを正しく実行していないと思いますか? –

関連する問題