XMPP:Play with It
前面谈了最基本的理论,现在就从应用的角度入手来实际感受下 XMPP。
从服务器来看,开源的 XMPP 服务器软件有很多,这里以 Openfire 为例,具体的搭建过程就不细说了,其管理后台如下:
我们可以切换到“用户/组”标签下新建几个用户以方便之后的实验。如下图所示有两个测试账户 user1 和 user2:
现在让我们切换到用户角色。首先使用一个配套工具 Spark 来尝试一下。在登录界面解决输入之前的账户和服务器信息即可:
不过这里建议在设置中打开调试模式点击登录以后即可看到好友列表和调...
twisted异步之路:Deferred(二)
我们已经尝试玩了下Deferreds(什么?不知情?快去看看《twisted异步之路:Deferred(一)》)。接下来就应该来点更为实际的,那就是放进Reactor。先来看一个例子:
from twisted.internet import reactor, defer
class HeadlineRetriever(object):
def processHeadline(self, headline):
&nb...
twisted异步之路:Deferred(一)
回调是事件驱动编程中的基础,反应堆(reactor)会通过回调将事件分派到对应的应用中。我们必须时刻处理正确以及错误的情况,而当程序逐渐增大,这将会变得异常复杂,一旦发生疏忽可能导致程序阻塞甚至崩溃。好在Twisted为我们提供了一个强大的抽象层来管理回调,它被称之为Deferred。
Deferred能帮助你编写异步代码,但并不是为自动生成异步或无阻塞的代码!要想将一个同步函数编程异步函数,必须在函数中返回Deferred并正确注册回调。
Deferred对象结构
Deferred由一系列成对的回调链组成,每一对都包含一个用于处理成功的回调(callbacks)和一个...
初识Twisted:Reactor、Transports和Protocols
最近在学习Twisted,在此归纳一些重要的概念和理念。
The Reactor
Reactor是Twisted的核心,它是一个循环体,也被称为事件循环。Reactor检测各种网络、文件系统和定时事件,等待事件的发生并将其正确分配到对应的事件处理函数。Twisted本身维护了一套跨平台的行为抽象并正确使用底层的无阻塞API接口。Twisted为不同的事件源提供了一个通用的接口,以便在网络协议栈的任何地方对事件作出响应都是一件很容易的事。
Reactor通常说来会完成以下的工作:
while True:
 ...
初识Twisted:事件驱动编程
最近在学习Twisted,在此归纳一些重要的概念和理念。
事件驱动编程(Event-Driven Programming)
Twisted是一个基于事件驱动的网络引擎。
在这种编程模式中,程序流程是由外部事件决定的。它的特性表现在一个事件循环以及采用回调来触发事件的相关动作。将此与其它两种常见模型进行比较应该会更益于理解,他们是单线程(同步)和多线程编程。
我们来看图说话。假如他们都需要处理三个任务,并且在进行I/O操作的时候均会发生阻塞。他们的表现形式将会如下图这样:
从左图可以看出,在单线程处理过程中,每个任务将会按顺序依次执行。当一个任务在处理...