python twisted框架_twisted 开发(1)-- twisted 框架介绍
異步非阻塞框架
twisted 是一個事件驅動的網絡開發框架,使用 python 開發。
twisted 框架編寫的服務器有幾個基本的元素:
應用程序對象(application):管理應用程序資源的對象,一個應用程序可以管理多個service對象。
服務(service),服務對象啟動監聽的端口,
協議工廠(factory):當客戶端連接到服務器時,用來創建協議對象。
協議(protocol):每個協議對象對應一個網絡連接。協議類處理網絡協議(如http,ftp,自定義協議等)
twisted 框架內部運行依賴的元素:
reactor:異步事件的主要循環處理類,負責監控事件,調用注冊的回調函數提供服務。(在linux上主要使用epoll/select來實現)
defer: 異步回調序列,當序列被執行的時候,順序執行注冊的回調函數。
官方的一個例子
實現一個 echo server,創建文件 echoServ.py
#!/usr/bin/env python
# coding: utf-8
from twisted.internet.protocol import Protocol
from twisted.internet.protocol import Factory
from twisted.internet.endpoints import TCP4ServerEndpoint
from twisted.internet import reactor
class Echo(Protocol):
'''
協議類實現用戶的服務協議,例如 http,ftp,ssh 等
'''
def __init__(self, factory):
self.factory = factory
def connectionMade(self):
'''
連接建立時被回調的方法
'''
self.factory.numProtocols = self.factory.numProtocols + 1
self.transport.write("Welcome! There are currently%dopen connections.\n" %
(self.factory.numProtocols,))
def connectionLost(self, reason):
'''
連接關閉時被回調的方法
'''
self.factory.numProtocols = self.factory.numProtocols - 1
def dataReceived(self, data):
'''
接收數據的函數,當有數據到達時被回調
'''
self.transport.write(data)
class EchoFactory(Factory):
'''
協議工廠類,當客戶端建立連接的時候,創建協議對象,協議對象與客戶端連接一一對應
'''
numProtocols = 0
def buildProtocol(self, addr):
return Echo(self)
if __name__ == '__main__':
# 創建監聽端口
reactor.listenTCP(8007, EchoFactory())
# 開始監聽事件
reactor.run()
運行服務程序
python echoServ.py
測試服務程序
telnet 127.0.0.1 8007
例子程序的說明
協議類繼承自 twisted.internet.protocol.Protocol,需實現 dataReceived 等方法。在協議類中實現應用協議。
協議工廠繼承自 twisted.internet.protocol.Factory,需實現 buildProtocol 方法。協議工廠負責實例化協議類,不應該保存于連接相關的狀態信息。
transport 就是連接對象,通過它進行網絡寫數據
使用 daemon 的方式運行程序
使用守護進程的方式運行服務,需要提供一個 tac 配置文件(這就是一個 python 文件,只是擴展名不同)
在這個文件中需要創建一個應用程序對象,對象名必須是 application。
創建一個 echo.tac 文件
#!/usr/bin/env python
# coding: utf-8
from twisted.application import service, internet
from echoServ import EchoFactory
# 創建應用程序對象
application = service.Application('Echo 服務程序')
# 創建 service 對象
myServices = internet.TCPServer(8007, EchoFactory())
# 設置 application 為 service 的父元素
myservices.setServiceParent(application)
用守護進程方式運行服務
twistd -y echo.tac
停止服務
kill -15 pid
總結
上面就是 twisted 網絡框架編寫服務的基本方法,在框架內部有豐富的協議工廠,協議,可是很方便的實現簡單的 http,ftp,ssh 等服務器程序。
后面我會介紹一些常用的功能的實現原理,例如:如何記錄日志,客戶端 http 異步請求的處理,defer運行原理等
總結
以上是生活随笔為你收集整理的python twisted框架_twisted 开发(1)-- twisted 框架介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小球弹性碰撞
- 下一篇: python 管道、队列_python