我想问一个关于如何关闭扭曲连接的问题 RPC
.
我知道有人问过类似的问题,但似乎没有回答我的问题。
我正在做一些基本的连接,如下图所示:
cfactory = pb.PBClientFactory()
reactor.connectTCP(<host>, <port>, cfactory)
dfr.addCallbacks(<callback>, <errfun>, ...)
...
(in the <callback> func) remote.callRemote('myfunc', ...)
这一切都有效,并且可以满足我的需求。
但问题是我看到连接仍然活跃(“ESTABLISHED”),如果我检查它
netstat -a
.由于我在无限期运行的客户端和服务器之间执行此操作,因此我不能只继续累积事件连接。
出于同样的原因,我也无法停止 react 堆。
那么,有没有办法关闭连接,而不是通过创建自己的协议(protocol)?
我想先检查一下,因为除了这个事实之外,一切都正常工作 - 如果可能的话,我将只添加一个需要的东西,而不是从协议(protocol)设置和所有开始。
感谢您的关注,任何一般性建议将不胜感激。
托尼
最佳答案
remote
是 RemoteReference
.它有一个 broker
属性是 twisted.spread.pb.Broker
创建它的协议(protocol)实例。与几乎所有协议(protocol)一样,Broker
实例有 transport
属性,它指的是表示协议(protocol)正在运行的连接的对象。
因此,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
工厂上的属性(但只有在实际建立连接之后,并且没有任何东西可以清理它,所以在连接丢失后它仍然存在 - 但你可以照顾它)。
关于twisted - 如何在 Twisted 中的 reactor.connectTCP 之后关闭连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4811086/