twisted學習筆記二--twisted的那三板斧
来源:互联网 发布:工作计划软件app 编辑:程序博客网 时间:2024/06/07 02:01
twisted的那三板斧
一個twisted網絡程序最基本的三個構件reactor、Factory、Protocol, 我稱之為twisted三板斧。想當年程爺爺就靠那三板斧幫李世民打下半壁江山,威力自然不可小覦。傳說中程咬金還有那絕殺的半個板斧,不過,不到關鍵時 刻不會使出,絕殺的東西用得多了,就不是絕殺。希望twisted也有那絕殺的半個板斧。
先看一下代碼。
#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)
- twisted學習筆記二--twisted的那三板斧
- twisted學習筆記二--twisted的那三板斧
- twisted
- Twisted
- Twisted
- python的twisted 学习
- 佩服Twisted的龌龊
- Twisted的WEB开发
- Twisted Cron的用法
- Twisted adbapi的使用
- twisted 的 epoll 爽歪歪
- twisted的单元测试
- twisted的FTPRealm解读
- Python的Twisted入门
- twisted入门教程之四:由Twisted支持的诗歌客户端
- Twisted的网络通信模型
- Twisted调试的启动代码
- Twisted的延时处理机制
- 安装Ubuntu 14.04后要做的5件事情
- 如何找到两个圆的公切线?
- 编程中常用到的输入模块
- zabbix报表自动邮件发送
- JAVA重写以及@Override标签
- twisted學習筆記二--twisted的那三板斧
- HUAWEI 20140911 Java机试题:计时器问题
- 中文域名怎样做虚拟配置?虚拟主机主机无法识别中文域名的解决办法?
- 【Android笔记】各个屏幕的logo尺寸要求
- 分布式缓存-Memcached
- twisted Deferred學習筆記一
- 解决SQL_Server2000“以前的某个程序安装已在安装计算机上创建挂起的文件操作。安装程序前必须重新启动计算机”
- GridView的RowCommand事件和DataList的ItemCommand事件
- nginx+fastcgi 實現多django站點應用