请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

ASGI 请求处理的理解

图片描述
上图可以看成 Daphne + Django 的请求处理逻辑

  1. Interface server 将 HTTP 和 WebSocket 封装成符合 ASGI 协议的格式(scope),对应的是 Daphne 服务
  2. CHANNEL LAYER 对应是 Redis 消息中间件,缓存所有的 HTTP 和 WebSocket 请求
  3. WORKER PROCESS 对应为 Django 应用,其中的 Channels 组件不断监听 CHANNEL LAYER,并拉取其中的 ASGI 请求。首先 Django 中的 channels.routing 会先鉴定 ASGI 请求的协议类型,然后将 WebSocket 分发到对应的 Consumer,并将 HTTP 分发到对应的视图函数

如果按照最后 Nginx + Gunicorn + Daphne + Django 的方式部署的话,对应的请求处理应该如下图:

图片描述

希望老师帮忙看看我的理解有没有问题 ?

另外既然 Daphne 可以处理 HTTP+websocket,那为什么还要使用 Gunicorn 独立处理 HTTP 呢?

正在回答

1回答

总结很棒,理解没有问题。置顶了!

https://img1.sycdn.imooc.com//szimg/5f33b3530962004b07000345.jpg

按照官网文档的意思,生产环境服务一般会用Gunicorn把HTTP请求和Websocket请求分开,配置也简单易懂。小站点的话其实可以只用Daphne部署处理两种类型的请求,望采纳~

参考:https://channels.readthedocs.io/en/latest/tutorial/part_2.html 

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信