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提供的网络应用服务处理