2010-11-18 18 views
2

başlamadan önce başlamasını bekleyin. Özünde orada şeyleri çözmek için bir DHT kullanır. DHT istemcisinin başlatılması birkaç saniye sürer, bu yüzden proxy'nin DHT hazır olduktan sonra yalnızca bağlantı kabul ettiğinden emin olmak istiyorum.bükülmüş hizmet Ben en bükülmüş uygulama çerçevesini kullanan bir proxy sunucu yazdım başka

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

nasıl Twisted CosipProxy hizmeti başlamadan önce bekler hizmetin bir çeşit EntangledDHT açabilirim? Bükümlü olarak benim için bunu yapan herhangi bir mekanizma var mı? Ya da uygulamanın geri kalanını oluşturan dht.ready'a bir geri arama eklemek zorunda mıyım? Teşekkürler

cevap

2

serv.setServiceParent(service.IService(application))'u hemen aramayın. Bunun yerine, geri bildiriminizde dht.ready'a kadar arama yapmak için bekleyin. Bu, uygulama hizmetinin zaten çalışıyorsa başlatılmasına neden olur.

Ayrıca, bir IServicedht kendisine benzemiyor. Olmalı; ya da daha doğrusu, from_config diye adlandırılan şey bir hizmet olmalıdır, çünkü görünüşe göre from_config bazı bağlantılara başlayacak (en azından, bu örnekte dht.ready'un patlayacağı gibi görünüyor). Eklentinizin veya tac dosyası bir hizmet başlangıç ​​değil , bir hizmet inşa olmalıdır. İlk startService çağrılıncaya kadar hiçbir şey olmamalıdır.

+0

Bir süredir cevap vermediğim için üzgünüm, bunun için zamanım olmadı. "EntangledDHT" yi bir IService'ye döndürdüğümde, obhect oluşturulduğunda değil, sadece "startService" deki ağa bağlanmaya başlamalıdır? Kullandığım kütüphane (dolaşık) bu oldukça doğru yapmaz, çünkü Protokol sınıfı da tanımladığından 'twisted.internet.reactor.listenUDP (..)'? –

İlgili konular