【问题标题】:Interaction with twisted.internet.reactor与 twisted.internet.reactor 的交互
【发布时间】:2010-01-17 11:10:04
【问题描述】:

我正在学习 Twisted,尤其是它的 XMPP 方面。我正在编写一个必须发送和接收消息的 Jabber 客户端。这是我的代码:http://pastebin.com/m71225776 据我了解,工作流程是这样的: 1. 我为重要的网络事件(即连接、消息接收、断开连接等)创建处理程序 2.我运行反应堆。此时开始等待任何事件的循环。当事件发生时,它被传递给指定的处理程序。 问题在于发送消息。发送与任何网络事件都没有关联,因此我无法为其创建处理程序。此外,在反应器的循环停止工作之前,我无法对反应器做任何事情。但目标是“在需要时发送消息并在需要时接收数据”。 我想我还没有完全理解扭曲的哲学,所以请给我一个正确的方法。

【问题讨论】:

    标签: python twisted


    【解决方案1】:

    您只需要找出哪些事件会触发发送消息。

    例如,在 GUI 客户端中,发送发生在用户键入内容时。您应该与图形工具包集成,在其主循环中使用 Twisted reactor(例如,有一个 Gtk+ Twisted reactor)。然后你就可以监听一些界面事件,比如用户在文本区域输入回车;并且您将能够通过发送消息对该事件做出反应。

    其他事件源可能是 Twisted 计时器、任何类型的协议,包括 IPC、webhooks...

    顺便说一句,如果您需要一个用于 Twisted 的 XMPP 更高级别的库,请查看Wokkel

    【讨论】:

      【解决方案2】:

      更准确地说,在反应器调用您的一个回调之前,您无法对反应器执行任何操作。你不叫扭曲,扭曲叫你。

      一种试验方法是让您知道将被调用的设置处理程序之一(或者只是在您启动反应器后放入测试代码)调用 callLater() 或 loopingCall()。

      【讨论】:

        猜你喜欢
        • 2013-09-20
        • 2012-08-09
        • 1970-01-01
        • 1970-01-01
        • 2016-06-02
        • 1970-01-01
        • 2014-06-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多