对于Twisted,“connectionMade”如何触发特定的延迟?

2024-09-29 23:18:33 发布

您现在位置:Python中文网/ 问答频道 /正文

这是一个更大程序的一部分;我只解释相关部分。基本上,我的代码希望创建到远程主机的新连接。这应该返回一个Deferred,一旦建立了连接,它就会触发,所以我可以发送一些关于它的东西。在

我正在创建与twisted.internet.interfaces.IReactorSSL.connectSSL的连接。它调用我的ClientFactory实例上的buildProtocol以获得一个新的connection(twisted.internet.protocol.Protocol)对象,并返回一个twisted.internet.interfaces.IConnector。当连接启动时,Twisted调用工厂上的startedConnecting,给它IConnector。当实际建立连接时,将调用协议的connectionMade回调,不带参数。在

现在,如果每个主机/端口只需要一个连接,其余的就很容易了。在调用connectSSL之前,我将创建一个Deferred并将其放入键入(host,port)的字典中。然后,在协议的connectionMade中,我可以使用self.transport.getPeer()来检索主机/端口,使用它来查找延迟的,并启动其回调。但是如果我想创建一个以上的连接,这显然会失败。在

问题是,我找不到任何其他方法来将我在调用connectSSL之前创建的延迟与以后的connectionMade相关联。在


Tags: 实例端口代码程序协议远程twistedinterfaces
1条回答
网友
1楼 · 发布于 2024-09-29 23:18:33

再看看这个,我想我已经想出了一个解决方案,尽管希望有更好的方法;这看起来有点奇怪。在

Twisted有一个类ClientCreator,用于生成简单的一次性连接。理论上它做我想做的事情;连接并返回一个Deferred,在建立连接时激发它。不过,我不认为我可以使用这个,因为我将失去向协议构造函数传递参数的能力,因此无法在连接之间共享状态。在

但是,我刚刚意识到ClientFactory构造函数确实接受*args来传递给协议构造函数。或者至少看起来像这样;实际上没有相关文档。在这种情况下,我可以给它一个参考我的工厂(或其他,如果工厂不再需要的话)。我得到了在建立连接时激发的Deferred。在

相关问题 更多 >

    热门问题