在Django中添加Daphne后,ASGI与WSGI的服务逻辑疑问
Daphne在Django中的工作机制与部署疑问解答
1. 加入INSTALLED_APPS后的工作机制
把Daphne加入INSTALLED_APPS,核心作用是让Django将其识别为ASGI适配层,同时替换Django默认的ASGI入口逻辑——原本Django的ASGI入口是django.core.asgi.get_asgi_application(),加入Daphne后,会通过它的封装逻辑来处理ASGI协议请求,包括WebSocket、HTTP/2这类异步请求,同时也能兼容传统同步HTTP请求。
2. Daphne是否能同时处理ASGI和WSGI请求
Daphne是原生ASGI服务器,但完全可以处理WSGI风格的同步请求。因为ASGI协议本身兼容WSGI:Daphne会把WSGI请求封装成ASGI格式,交给Django的WSGI应用处理,再把响应转换回对应格式返回。也就是说,它不需要额外依赖WSGI服务器就能覆盖所有请求类型。
3. 此时Gunicorn是否还负责处理WSGI请求
如果只部署Daphne,Gunicorn就不需要运行了——Daphne已经能处理所有请求场景。当然你也可以选择同时运行两者,通过反向代理(比如Nginx)分流请求,比如把WebSocket请求发给Daphne,普通HTTP请求发给Gunicorn,但这属于可选优化,不是必须的架构。
4. 是否需要同时运行两个服务器
不需要。Daphne可以单独处理所有ASGI和WSGI请求,部署时只需要启动Daphne一个服务器,就能支撑同步HTTP、异步WebSocket等所有业务场景。
内容的提问来源于stack exchange,提问作者momo
相关产品推荐
相关产品推荐

