Asyncio 协议Protocol 与 传输Transport

如题所述

第1个回答  2022-07-02

python在asyncio库中,提供了一种简单的网络传输模型,协议与传输。

协议和传输,在socket的基础上进行了封装,是更高一层次的应用。
所以说: ASGI服务器并不是从socket基础层面实现通信,而是使用了asyncio中原生提供的一种网络通信方式。

Transport 类位于 asyncio.transports 中,有例如 BaseTransport , WriteTransport 只写, ReadTransport 只读, Transport 继承于前两个只写和只读的Transport

位于 asyncio.Protocol

接受protocol_factory,可以调用的工厂函数,其返回一个协议Protocol实例

server 对象是 asyncio.base_events.Server 的实例

我简单写了个小例子,使用协议和传输,制作一个C/S

为了方便观看调整了下key顺序

可以明确看到,使用了socket,说明socket的建立,已经是封装到内部的。
s端和c端的socket是完全对应的。

而H11是一个实现 http协议
uvicorn 用了HTTP协议库做了相应的 Protocol 。交由asyncio提供的网络应用服务处理

相似回答