asyncio server protocol协议

本文介绍了如何在Python的asyncio库中创建一个TCP服务器,并利用自定义的HTTPProtocol协议处理Web服务请求。asyncio的协议方法包括connection_made、data_received、eof_received和connection_lost。通过这些方法,我们可以实现类似于Sanic或Flask的异步Web框架。文中提到,Sanic使用httptools进行高效的请求解析,而其他如Flask和Django的解析可能没有那么高效。此外,还探讨了uWSGI和Sanic在部署上的区别,Sanic可以直接用Python启动,而uWSGI提供了额外的进程管理和守护进程功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值