加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 16:18:56 所属栏目:百科 来源:网络整理
导读:我想问一个关于如何在扭曲的RPC中关闭连接的问题. 我知道有一个类似的问题,但它似乎没有回答我的问题. 我正在做一些基本连接,如下图所示: cfactory = pb.PBClientFactory()reactor.connectTCP(host,port,cfactory)dfr.addCallbacks(callback,errfun,...)...
我想问一个关于如何在扭曲的RPC中关闭连接的问题.
我知道有一个类似的问题,但它似乎没有回答我的问题.
我正在做一些基本连接,如下图所示:

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

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

解决方法

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属性(但是只有在实际建立连接之后,没有任何东西可以清理它,所以在连接丢失后它仍然存在 – 但是你可以照顾它).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读