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