这是一个更大计划的一部分;我将仅解释相关部分。基本上,我的代码想要创建到远程主机的新连接。这应该返回一个 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稍后创建的关联。