【问题标题】:Starting and stopping Twisted connections启动和停止 Twisted 连接
【发布时间】:2018-01-08 12:11:11
【问题描述】:

我正在编写使用 python Twisted API 的应用程序(即WebSocketClientProtocol, WebSocketClientFactory, ReconnectiongClientFactory。我想用以下接口将客户端工厂包装到阅读器中

class Reader: 
    def start(self):
        pass
    def stop(self):
        pass

Start 函数将用于打开连接(即在 ws api 上连接并开始读取数据),而stop 将停止此类连接。

我的问题是,如果我在 start 中使用 reactor.run(),连接就会开始并且一切正常,但我的代码永远不会通过该行(看起来像阻止对我的调用)并且我无法执行后续行(包括 @ 987654326@ 在我的测试中)。

我尝试过使用诸如reactor.callFromThread(reactor.run)reactor.callFromThread(reactor.stop) 之类的变体,甚至是调用Thread(target=...) 的excplicity,但似乎都不起作用(它们通常根本不构建协议或打开连接)。

欢迎任何有关如何实施 Reader.startReader.stop 的帮助或指南。

【问题讨论】:

    标签: python websocket twisted twisted.internet twisted.client


    【解决方案1】:

    如果您将reactor.run 放在Reader.start 中,那么Reader 将是一个难以与其他代码一起使用的组件。您的困难只是这方面的第一个症状。

    调用reactor.runreactor.stop 是负责管理应用程序生命周期的代码的工作。将这些调用与您的 WebSocket 应用程序代码分开放置。例如:

    r = Reader()
    r.start()
    reactor.run()
    

    或者更好的是,实现 a twist(d) plugin 并让 twist(d) 为您管理反应器。

    【讨论】:

    • 感谢您的回答。我担心我不得不将reactor.runreactor.stop 放在Reader 的范围之外。你愿意给我一些关于实现扭曲插件方法的建议吗?
    • 没问题,文档链接已添加。
    • 太好了,我去看看。
    猜你喜欢
    • 2011-01-07
    • 1970-01-01
    • 2016-07-19
    • 2016-12-19
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多