asyncio server protocol协议

在python asyncio 库中可以创建 server 和 connection, 想要使用 asyncio 创建 server服务器的话需要一个 protocol 协议对象处理请求服务, 在asyncio 中,server 底层是tcp server, 想要实现web server 就需要实现 protocol协议,用自定义的protocol 来处理解析请求数据

protocol

在asyncio中定义了server 请求进来的处理协议, 常用的有:

# 创建http协议处理对想
class HttpProtocol(asyncio.Protocol):
    """
    asyncio 异步io协议 方法执行顺序:
    connection_made -> data_received -> eof_received -> connection_lost
    """
    def __init__(self, loop: asyncio.get_event_loop(), server):
        self.loop = loop
        self.transport = None
        self.server = server

    def connection_made(self, transport):
        """
        连接建立时会调用的方法,
        :param transport transport可以理解为是一个 上下文,transport 对象中包含了客户端的请求信息
        """

        self.transport = transport       # 将上下文对象保存到对象属性中

    def data_received(self, data):
        """
        当创建完连接,执行完connection_made初始化的时候,会调用这个方法,将请求的数据传递到这里,
        在这里可以处理解析请求协议、路由、数据,
        :param data 就是请求的数据(二进制)
        """
		# 关于uWSGI和sanic 部署个人理解:
		# sanic 部署到生产环境上可以直接 用 python 直接启动程序, 不需要uWSGI, 而 flask django
		# 则不行, 个人理解是 sanic 使用 httptools 来处理解析请求,
		# httptools 用c 来写的,运行起来比python自己写的解析要快, 
		# 而flask django 框架自带的处理解析请求是用python 写的,性能没那么高,
		# 而且 uWSGI 中还包含了守护进程、进程管理等功能
        pass

    def eof_received(self):
        """
        有些请求是通过eof描述符来代表结束的, 遇到这种协议的请求时,会调用这个方法
        :return None:
        """

        pass

    def connection_lost(self, exc):
        """
        请求结束收尾工作,不管有没有异常都会执行到
        :param exc: 参数 exc 是异常信息, 如果没有异常,exc 参数就是None
        :return:
        """
        pass

transport

transport 个人理解就是一个请求上下文,transport 对象中包含了这个请求的请求信息

实现类似 sanic 的异步web 框架

通过asyncIo create_server + 自定义 protocol 来实现一个类似 sanic、flask的mini_web 框架,
项目地址:mini_web.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值