这是一个更大计划的一部分;我将仅解释相关部分。基本上,我的代码想要创建到远程主机的新连接。这应该返回一个 Deferred,一旦建立连接就会触发,所以我可以在上面发送一些东西。
我正在与twisted.internet.interfaces.IReactorSSL.connectSSL
. 这会调用buildProtocol
我的ClientFactory
实例来获取一个新的连接 ( twisted.internet.protocol.Protocol
) 对象,并返回一个twisted.internet.interfaces.IConnector
. 当连接开始时,Twisted 调用startedConnecting
工厂,给它一个IConnector
. 当实际建立连接时,将调用协议的connectionMade
回调,不带任何参数。
现在,如果每个主机/端口只需要一个连接,其余的就很容易了。在调用 之前connectSSL
,我会创建一个 Deferred 并将其放入以(主机、端口)为键的字典中。然后,在协议的 connectionMade 中,我可以使用self.transport.getPeer()
它来检索主机/端口,用它来查找 Deferred,并触发它的回调。但是,如果我想创建多个连接,这显然会失败。
问题是我看不到任何其他方法可以将我在调用之前创建的 DeferredconnectSSL
与connectionMade
稍后创建的关联。