Twisted 使用心得

前言

Twisted是以event为驱动的异步框架,reactor为它的核心组件,全局循环,有event会触发,这样主程序不用阻塞去处理某一条连接,达到I/O异步的效果。此外Twisted支持许多常见的传输及应用层协议,包括TCP、UDP、SSL/TLS、HTTP、IMAP、SSH、IRC以及FTP,内置了很多类型的protocol,factory,可以根据需求做不同选择

概述

在twsited中无论多复杂的业务都是通过factory和protocol去实现的,factory负责管理连接,protocol负责处理数据。

TCP Server实现
# -*- coding:utf-8 -*-
import functools
import time
import logging
from twisted.internet.protocol import Protocol, ServerFactory
from twisted.internet import reactor
from twisted.internet.threads import deferToThread


class EchoProtocol(Protocol):

    def __init__(self):
        pass

    def connectionMade(self):
        print "Connection made:%s" % self.transport.getPeer()

    def connectionLost(self, reason):
        print "Connection %s losted" % str(self.transport.client) + str(reason)

    def dataReceived(self, data):
        print "Received Data:%s" % data
        if data:
            self.transport.write(data)
            # 这里把耗时的IO任务异步处理,这样不会阻塞主程序
            func = functools.partial(self.do_something,'params')
            # 回调函数
            deferToThread(func).addBoth(lambda x: x, '0')
        self.transport.loseConnection()

    def do_something(self, *args, **kwargs):
        pass


class EchoFactory(ServerFactory):

    def __init__(self):
        # 将protocol类型初始化
        self.protocol = EchoProtocol
        # 将factory当做protocol属性可以共享factory方法,例如日志模块等
        self.protocol.factory = self
        self.set_log()

    def startFactory(self):
        print "Start Processor Factory at %s" % time.strftime("%Y%m%d%H%M%S")

    def stopFactory(self):
        print "Stop Processor Factory at %s" % time.strftime("%Y%m%d%H%M%S")

    def set_log(self):
        pass

reactor.listenTCP(8008,EchoFactory())
reactor.run()

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值