Ich habe einen Proxyserver geschrieben, der das Anwendungsframework von twisted verwendet. Im Kern verwendet es einen DHT, um Dinge zu lösen. Der DHT-Client benötigt einige Sekunden, um zu starten. Daher möchte ich sicherstellen, dass der Proxy nur Verbindungen akzeptiert, nachdem der DHT bereit ist.Warten Sie, bis ein verdrehter Dienst gestartet wird, bevor Sie einen weiteren starten
# 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))
Wie schalte ich den EntangledDHT
in eine Art von Dienst, Verdreht für vor dem Start des CosipProxy
Dienst warten will? Gibt es einen Mechanismus in Twisted, der dies für mich tut? Oder muss ich einen Rückruf an dht.ready
hinzufügen, der den Rest der Anwendung erstellt? Danke
Sorry ich habe nicht eine Weile geantwortet, ich hatte keine Zeit um daran zu arbeiten. Wenn ich den 'EntangledDHT' in einen IService umwandle, sollte er sich nur in' startService' mit dem Netzwerk verbinden, nicht wenn der Obhect erstellt wird? Ich nehme an, die Bibliothek, die ich verwende (verschränkt), tut das auch nicht richtig, da die von ihr definierte Protokollklasse auch 'twisted.internet.reactor.listenUDP (..)'? –