随着扭曲的,怎么能“connectionMade”火特定延期?
-
05-09-2019 - |
题
这是一个较大的程序的一部分;我只能解释的相关部分。基本上,我的代码要创建到远程主机的新连接。这将返回一个延迟,一旦连接建立的时候触发,这样我就可以将它发送的东西。
我创建与twisted.internet.interfaces.IReactorSSL.connectSSL
的连接。这要求buildProtocol
我ClientFactory
实例来得到一个新的连接(twisted.internet.protocol.Protocol
)对象,并返回一个twisted.internet.interfaces.IConnector
。当连接开始时,扭曲的工厂调用startedConnecting
,给它的IConnector
。当连接实际上是由,协议的connectionMade
回调被调用,不带参数。
现在,如果我只需要每个主机/端口的一个连接,其余的将是容易的。调用connectSSL
之前,我将创建一个延迟,并把它放在键上(主机,端口)的字典。然后,在协议的connectionMade,我可以用self.transport.getPeer()
检索主机/端口,用它来查找递延,并触发其回调。但是,这显然打破了,如果我想创建一个以上的连接。
的问题是,我看不到任何其他方式关联起来递延我打电话connectSSL
与connectionMade
稍后之前创建的。
解决方案
目前看多一些,我想我已经想出了一个解决方案,但希望有一个更好的办法;这似乎有点奇怪。
扭曲有一个类,即ClientCreator
用于产生简单的单次使用的连接。它在理论上我想要做什么;连接并返回连接建立的时候触发一个Deferred
。我不认为我可以利用这一点,虽然,因为我失去了参数传递给协议的构造,因此没有办法连接之间共享状态的能力。
然而,我刚意识到ClientFactory
构造函数接受*args
传递给协议构造。或者至少它看起来像它;所以实际上这个没有文档。在这种情况下,我可以给我的工厂(或任何其他,如果工厂不再是必要的)的引用。我找回那种火灾建立连接时Deferred
。