http://www.uvicorn.org/
uvicron官方文档
uvicron有两种运行方式
第一种是代码式
import uvicorn
uvicorn.run(app, host="127.0.0.1", port=8000)
第二种是命令式
uvicorn 模块名:app --port=8000 --host=127.0.0.1
个人更倾向于第一种
官方文档在ASGI相关中提到
Uvicorn使用ASGI规范与应用程序进行交互。
该应用程序应公开一个异步可调用对象,该对象带有三个参数:
-
scope
-包含有关传入连接信息的字典。 -
receive
-一个从服务器接收传入消息的通道。 -
send
-将消息发送到服务器的通道。
您可能使用的两种常见模式是基于函数的应用程序:
这解决了我在关于Starlette 源码阅读 (阶段总结一)中提出的问题,证实send与receive是与asgi应用服务器进行通信
基于函数的app
async def app(scope, receive, send):
assert scope['type'] == 'http'
基于类的app
class App:
async def __call__(self, scope, receive, send):
assert scope['type'] == 'http'
...
app = App()
官方文档内容比较少,并且没有说明具体的底层操作。等过段时间开一个Uvicorn源码阅读。
网友评论