twisted學習筆記二--twisted的那三板斧

twisted的那三板斧

          一個twisted網絡程序最基本的三個構件reactor、Factory、Protocol, 我稱之為twisted三板斧。想當年程爺爺就靠那三板斧幫李世民打下半壁江山,威力自然不可小覦。傳說中程咬金還有那絕殺的半個板斧,不過,不到關鍵時 刻不會使出,絕殺的東西用得多了,就不是絕殺。希望twisted也有那絕殺的半個板斧。
         先看一下代碼。


#!/usr/bin/env python
#coding=utf-8

from twisted.internet import protocol,reactor

class muProtocol(protocol.Protocol):

    def connectionMade(self):
        print 'connectionMade'
        self.factory.clients[self]={}
        self.factory.clients[self]['isblankly']=True

    def dataReceived(self,data):
        self.factory.clients[self]['isblankly']=False
        self.transport.write(self.factory.getSomething(data))
        print 'receive: %s' % data
        if data=='q':
            self.transport.loseConnection()

class muFactory(protocol.ServerFactory):
    protocol=muProtocol

    def __init__(self):
        reactor.callLater(5,self.timeout)
        self.clients={}

    def timeout(self):
        print 'timeout check.'
        for c in self.clients:
            if self.clients[c]['isblankly']:
                c.transport.loseConnection()
            else:
                self.clients[c]['isblankly']=True
        reactor.callLater(5,self.timeout)

    def getSomething(self,data):
        return '/n/rServer say: %s/n/r' % data

reactor.listenTCP(20190,muFactory())
reactor.run()


    上面的代碼作為第一個例子可能有點長,twisted文檔簡單的服務程序樣例代碼只有11行,但我這個也很簡單,也就 是那三板斧。下面開始解說那三板斧怎麼耍。
    首先是導入相應的庫from twisted.internet import protocol,reactor,這不用細說,接下來是耍出那三板斧。
    
     class muProtocol(protocol.Protocol) ,定義自己的Protocol
          class muFactory(protocol.ServerFactory),定義自己的Factory
    
     reactor.listenTCP(20190,muFactory()), 架設reactory
         reactor.run(),運行reactor
 
    一開始對這三者的三角關係也許弄不明,其實也很明了簡單,絕不像男女之間三角關係那麼混亂。作個比方,Protocol為原料供應 商,Factory為加工工廠將原料加工成自己的產品,reactor為營運公司。
         營運公司
reactor, 決定工廠Factory的運作方式、什麼時候開始動作以 及其它一些動作。
         工廠Factory,接收原料供應商的原料並加工處理成所需 產品,並管理供應商,工廠可以選擇供應商、不爽時可以終止供應商的關係。
         原料供應商Protocol,它只是將原料送到工廠,並告知工廠有貨到,交完貨後它就不管了,工廠喜歡怎麼做是你的事。或者原料供應出現異常也會通知工廠。

     yy這麼久後,
下面要看下三者關係的確立。
    首先定義Protocol,以便響應Protocol不同事件。
         class muProtocol(protocol.Protocol)

    上面代碼中connectionMade 在鏈接發生時響應, 在接收到數據時響應dataReceived, 另外還有一個鏈接丟失時響應的connectionLost 沒有在上面代碼中用上。
    雖然 Protocol定義好後,但它並未真正運行,因為沒人向它訂貨。

     客戶來了!建立Factory,有工廠當然就需要原料,這樣一來Protocol就有生意可做啦。
     class muFactory(protocol.ServerFactory): #定義工廠
         protocol=muProtocol #這一句指明了工廠與哪家供應商Protocol建立合作關係,合同簽了可不能反悔哦。
     工廠建好了,原料供應 也正常了,開工賺錢羅!等等,誰讓你開工的,老大還沒開口呢,看來你們需要被教育下。
     雖然工廠建好,原料供應 正常,還要老大開下口,看下稅務、財務之類的準備好沒有。

    老大開口了。
     reactor.listenTCP(20190,muFactory()) #嗯,海外市場環境不好,出口不好做,決定做內銷,讓muFactory來做吧。
    reactor.run() #一聲令下開工,銀子白花花的來啊,爽

     啊啊,這篇東東 好像快完結了,上面代碼用來作什麼還沒講呢。
    整個程序是將客戶端送過來的數據在前面加上
'/n/rServer say: %s/n/r'後,再送回客戶端。另外加入超時機制, 鏈接如果空閒5秒鍾(沒有接收數據),就斷開那個鏈接。

    def __init__(self):
        reactor.callLater(5,self.timeout) #建立工廠時就制定巡查制度

    def timeout(self):
        print 'timeout check.'
         #領導巡查時間
        reactor.callLater(5,self.timeout)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值