Chinaunix首页 | 论坛 | 博客
  • 博客访问: 590587
  • 博文数量: 226
  • 博客积分: 10080
  • 博客等级: 上将
  • 技术积分: 1725
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-26 11:15
文章分类

全部博文(226)

文章存档

2011年(5)

2010年(64)

2009年(99)

2008年(37)

2007年(21)

我的朋友

分类: LINUX

2010-04-23 18:50:54

     twisted 是个事件驱动的框架,事件驱动的意思类似程序不能按照一定的顺序流来做,学过MFC或桌面的应用GUI的人都知道,GUI一般都为事件驱动的,比如你不知道用户什么时候会点按钮。
     事件驱动一般都有个event loop,相当于汽车的引擎一样。另外为每个事件注册个回调方法,这个方法在事件的发生时候执行,比如你点下查询按钮,程序定义的回调方法来执行数据的查询工作。
    
     twisted里面的引擎为reactor,我觉得有点类似ACE里面的reactor。
from twisted.internet import reactor

import time



def printTime( ):

    print "Current time is", time.strftime("%H:%M:%S")



def stopReactor( ):

    print "Stopping reactor"

    reactor.stop( )


#1秒钟后调用printtime方法
reactor.callLater(1, printTime)

reactor.callLater(2, printTime)

reactor.callLater(3, printTime)

reactor.callLater(4, printTime)
#5秒钟后停止引擎
reactor.callLater(5, stopReactor)



print "Running the reactor..."

reactor.run( )

print "Reactor stopped."

 

当然twisted是网络相关的操作,所以建立连接是这类程序的第一步,看看下面的例子吧:

from twisted.internet import reactor, protocol


#自己定义的协议,当factory建立连接后,剩下的事情就交个它处理了。
class QuickDisconnectProtocol(protocol.Protocol):

    def connectionMade(self):

        print "Connected to %s." % self.transport.getPeer( ).host

        self.transport.loseConnection( )


#它的作用是管理连接
class BasicClientFactory(protocol.ClientFactory):

    protocol = QuickDisconnectProtocol



    def clientConnectionLost(self, connector, reason):

        print "Lost connection: %s" % reason.getErrorMessage( )

        reactor.stop( )



    def clientConnectionFailed(self, connector, reason):

        print "Connection failed: %s" % reason.getErrorMessage( )

        reactor.stop( )



reactor.connectTCP('', 80, BasicClientFactory( ))

reactor.run( )



阅读(1002) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~