如何在Twisted中的reactor.connectTCP之后关闭连接

时间:2011-01-26 22:56:40

标签: twisted

我想问一个关于如何以扭曲的RPC关闭连接的问题 我知道有一个类似的问题,但似乎没有回答我的问题 我正在做一些基本的连接,如下图所示:

cfactory = pb.PBClientFactory()
reactor.connectTCP(<host>, <port>, cfactory)
dfr.addCallbacks(<callback>, <errfun>, ...)
...
(in the <callback> func)   remote.callRemote('myfunc', ...)

这一切都有效,并且做了我需要的东西 但麻烦的是,如果我检查它,我看到连接仍然有效(“ESTABLISHED”) netstat -a
由于我在无限期运行的客户端和服务器之间执行此操作,因此我不能只是继续累积活动连接。
由于同样的原因,我无法阻止反应堆 那么,是否有办法关闭连接,而不是通过创建自己的协议? 我想首先检查一下,因为除了这个事实之外它全部处于正常工作状态 - 如果可能的话我只需要添加一个所需的东西,而不是从协议设置开始。所有。 感谢您的关注,我们将非常感谢您的一般建议 托尼

1 个答案:

答案 0 :(得分:8)

remoteRemoteReference。它有一个broker属性,它是创建它的twisted.spread.pb.Broker协议实例。与几乎所有协议一样,Broker实例具有transport属性,该属性引用表示协议正在运行的连接的对象。

因此,remote.broker.transport.loseConnection()应该做你想做的事。

还有其他选择。您可以在工厂捕获Broker实例:

class MyPBFactory(pb.PBClientFactory):
    def buildProtocol(self, addr):
        proto = pb.PBClientFactory.buildProtocol(self, addr)
        self.proto = proto
        return proto

现在你在工厂上有一个proto属性(但是只有在实际建立连接之后,没有任何东西可以清理它,所以它会在连接丢失后仍然存在 - 但你可以照顾这一点)。