与twisted.internet.reactor的交互
我正在学习Twisted,特别是它的XMPP部分。我正在写一个Jabber客户端,需要发送和接收消息。这里是我的代码:http://pastebin.com/m71225776。 我理解的工作流程是这样的: 1. 我为重要的网络事件创建处理器(比如连接、接收消息、断开连接等)。 2. 我运行反应器(reactor)。此时会开始一个循环,等待任何事件发生。当事件发生时,它会被传递给指定的处理器。 问题出在发送消息上。发送消息并不与任何网络事件关联,所以我无法为其创建处理器。而且在反应器的循环停止工作之前,我无法对其做任何操作。但我的目标是“在需要时发送消息,并在数据到达时接收”。 我觉得我还没有完全理解Twisted的哲学,所以请给我指条明路。
2 个回答
0
更准确地说,在反应堆(reactor)调用你的回调函数之前,你什么都做不了。不是你去调用 Twisted,而是 Twisted 来调用你。
一种实验的方法是让你知道会被调用的某个设置处理程序(或者在你启动反应堆后放一些测试代码)去调用 callLater() 或者 loopingCall()。