在启动另一个服务之前等待扭曲的服务启动

时间:2010-11-18 18:10:52

标签: python twisted twisted.application

我编写了一个使用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添加回调?感谢

1 个答案:

答案 0 :(得分:2)

请勿立即致电serv.setServiceParent(service.IService(application))。相反,请等待回调到dht.ready。如果应用程序服务已在运行,这将导致它被启动。

此外,它看起来dht本身不是IService。它应该是;或者更确切地说,调用from_config的东西应该是一个服务,因为显然from_config将开始一些联系(至少,如果dht.ready将要发生的话,那就是它的样子在这个例子中射击)。您的插件或tac文件应构建服务,而不是启动服务。在调用第一个startService之前不会发生任何事情。