Django项目单独运行ASGI与WSGI后WebSocket连接失败原因排查
WebSocket连接失败的核心原因
- WebSocket连接的建立必须经过HTTP握手环节:客户端发起ws连接时,先发送一个带
Upgrade: websocket头部的HTTP请求,请求协议升级。如果你的ASGI应用的ProtocolTypeRouter里完全没有配置"http"类型的处理逻辑,Daphne收到这个握手请求后找不到对应的处理程序,会直接拒绝请求,导致WebSocket连接失败。 - 哪怕你不想让ASGI服务处理普通HTTP业务请求,也不能完全去掉
"http"对应的配置——至少需要让它能处理WebSocket的握手请求。你可以配置一个极简的HTTP处理函数,或者保留get_asgi_application()但通过URL路由规则限制仅处理WebSocket相关的握手请求,而把普通HTTP请求完全交给Gunicorn的WSGI服务处理。
内容的提问来源于stack exchange,提问作者Partho Debnath
相关产品推荐
相关产品推荐

