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运行原理等

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值