Twisted 网络编程学习(一)
Twisted是一个事件驱动的框架。每个事件驱动框架包括了一个特殊的函数叫做事件循环。一旦开始,事件循环就不会停止,当运行时,事件循环等待事件发生,一旦事件发生,就调用对应的事件处理函数。
在Twisted中,实现事件循环的对象叫reactor.可以把reactor看做是Twisted应用程序的中央神经系统,除了负责事件循环,reactor还处理许多许多其他也很重要的任务:如调度,创建网络连接,侦听其它机器的连接等。为了运行reactor做所有上述工作,必须启动它的事件循环,让其控制你的程序
1: from twisted.internet import reactor
2:
3: reactor.run()
reactor的callLater方法用来建立调度事件。
1: reactor.callLater(seconds,function,etc)
所有的网络程序都以一个基本的步骤开始:创建一个连接
1: reactor.connectTCP(ip,port,ClientFactory’)
ClientFactory的工作是管理连接相关的事件,并为每个成功的连接创建一个新的Protocol对象。一旦连接建立了,Protocol对象就将接管,其职责是负责发送和接收数据,并决定何时关闭连接
Deferred可能是除reactor之外在Twisted中最重要的对象。你将在Twisted应用中频繁的使用Deferred对象,该对象跟踪一个异步动作,在动作完成时得到结果。
在写一个开始异步动作的函数时,返回一个Deferred对象,当动作完成时,以返回值为参数调用Deferred的回调函数。如果动作失败了,以异常为参数调用Deferred.errback
1: Deferred.addCallback(function)
2:
3: Deferred.addErrback(function)
4:
DefferredList将跟踪在列表中的结果,当所有结果都结束了,将会返回一个元组列表的格式。如果Deffered成功完成,元组的第一个值将会为TRue,第二个值将会包含Defered返回的结果。如果失败,第一个值将会为False,第二个值将会包含一个Failure对象。
覆写dataReceived方法就能控制当有数据被接收时的行为。而self.transport.write可以用来发送数据。
1: twisted.internet.stdio.StandardIO(IProtocol)
t.i.stdio.StandardIO将传入的协议与当前进程的标准输入输出连接
twisted.protocols.basic.LineReciever是比Protocol.LineReceiver略微高级的协议,可以自动的把输入分隔成行的形式,使得每次处理一行
对于ServerFactory的子类,reactor.ConnectTcp只需要两个参数,一个是端口号,一个是该子类