我想问一个关于如何以扭曲的RPC
关闭连接的问题
我知道有一个类似的问题,但似乎没有回答我的问题
我正在做一些基本的连接,如下图所示:
cfactory = pb.PBClientFactory()
reactor.connectTCP(<host>, <port>, cfactory)
dfr.addCallbacks(<callback>, <errfun>, ...)
...
(in the <callback> func) remote.callRemote('myfunc', ...)
这一切都有效,并且做了我需要的东西
但麻烦的是,如果我检查它,我看到连接仍然有效(“ESTABLISHED”)
netstat -a
。
由于我在无限期运行的客户端和服务器之间执行此操作,因此我不能只是继续累积活动连接。
由于同样的原因,我无法阻止反应堆
那么,是否有办法关闭连接,而不是通过创建自己的协议?
我想首先检查一下,因为除了这个事实之外它全部处于正常工作状态 - 如果可能的话我只需要添加一个所需的东西,而不是从协议设置开始。所有。
感谢您的关注,我们将非常感谢您的一般建议
托尼
答案 0 :(得分:8)
remote
是RemoteReference
。它有一个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
属性(但是只有在实际建立连接之后,没有任何东西可以清理它,所以它会在连接丢失后仍然存在 - 但你可以照顾这一点)。