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

标签 twisted

我想问一个关于如何关闭扭曲连接的问题 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)设置和所有开始。
感谢您的关注,任何一般性建议将不胜感激。
托尼

最佳答案

remoteRemoteReference .它有一个 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/

相关文章:

python - 集群 TCP 服务器,因此可以向所有客户端发送数据

python - 将模块和应用程序安装到离线系统的规范方法

python - 使用扭曲矩阵的聊天网站架构

python - 即使存在未处理的异常,是否有办法强制 Scrapy 进入解析方法?

asynchronous - 扭曲/延期的工作原理

twisted - 我应该如何命名 twisted.internet.defer.Deferred 的实例?

扭曲的http gzip支持

Python异步UDP服务器

python - 使用 Scrapy 时出错 : ['scrapy.telnet.TelnetConsole' : No module named conch twisted]

python - 为什么 Twisted Transports 没有接收数据的方法?