与twisted.internet.reactor交互

时间:2010-01-17 11:10:05

标签: python twisted

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

2 个答案:

答案 0 :(得分:2)

您只需要查找将触发发送消息的事件。

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

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

顺便提一下,如果你需要一个更高级别的XMPP文件库,请查看Wokkel

答案 1 :(得分:0)

更准确地说,在调用其中一个回调之前,您无法对reactor执行任何操作。你不要打电话给你扭曲,扭曲的电话。

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