日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python twisted框架_twisted 开发(1)-- twisted 框架介绍

發布時間:2024/3/26 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 框架介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。