这是一个较大的程序的一部分;我只能解释的相关部分。基本上,我的代码要创建到远程主机的新连接。这将返回一个延迟,一旦连接建立的时候触发,这样我就可以将它发送的东西。

我创建与twisted.internet.interfaces.IReactorSSL.connectSSL的连接。这要求buildProtocolClientFactory实例来得到一个新的连接(twisted.internet.protocol.Protocol)对象,并返回一个twisted.internet.interfaces.IConnector。当连接开始时,扭曲的工厂调用startedConnecting,给它的IConnector。当连接实际上是由,协议的connectionMade回调被调用,不带参数。

现在,如果我只需要每个主机/端口的一个连接,其余的将是容易的。调用connectSSL之前,我将创建一个延迟,并把它放在键上(主机,端口)的字典。然后,在协议的connectionMade,我可以用self.transport.getPeer()检索主机/端口,用它来查找递延,并触发其回调。但是,这显然打破了,如果我想创建一个以上的连接。

的问题是,我看不到任何其他方式关联起来递延我打电话connectSSLconnectionMade稍后之前创建的。

有帮助吗?

解决方案

目前看多一些,我想我已经想出了一个解决方案,但希望有一个更好的办法;这似乎有点奇怪。

扭曲有一个类,即ClientCreator用于产生简单的单次使用的连接。它在理论上我想要做什么;连接并返回连接建立的时候触发一个Deferred。我不认为我可以利用这一点,虽然,因为我失去了参数传递给协议的构造,因此没有办法连接之间共享状态的能力。

然而,我刚意识到ClientFactory构造函数接受*args传递给协议构造。或者至少它看起来像它;所以实际上这个没有文档。在这种情况下,我可以给我的工厂(或任何其他,如果工厂不再是必要的)的引用。我找回那种火灾建立连接时Deferred

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top