当前位置:   article > 正文

asyncio server protocol协议_asyncio.server

asyncio.server

在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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
transport

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

实现类似 sanic 的异步web 框架

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/91415
推荐阅读
相关标签
  

闽ICP备14008679号