Django ASGI通道应用程序未跟踪多个websocket客户端(使用redis和nginx) 编辑:
在为WebSocket定义路由时,我遗漏了.as_asgi(),这意味着我创建的每个实例都会被我创建的下一个实例覆盖 My routing.py现在看起来像:Django ASGI通道应用程序未跟踪多个websocket客户端(使用redis和nginx) 编辑:,django,nginx,websocket,redis,channels,Django,Nginx,Websocket,Redis,Channels,在为WebSocket定义路由时,我遗漏了.as_asgi(),这意味着我创建的每个实例都会被我创建的下一个实例覆盖 My routing.py现在看起来像: application = ProtocolTypeRouter({ 'websocket': AllowedHostsOriginValidator( AuthMiddlewareStack( URLRouter( [
application = ProtocolTypeRouter({
'websocket': AllowedHostsOriginValidator(
AuthMiddlewareStack(
URLRouter(
[
url("calling/interface/", ChatConsumer.as_asgi()),
]
)
)
)
})
application = ProtocolTypeRouter({
'websocket': AllowedHostsOriginValidator(
AuthMiddlewareStack(
URLRouter(
[
url("calling/interface/", ChatConsumer.as_asgi()),
]
)
)
)
})
原始问题:
我有Django和本地vm上托管的asgi频道,我也在使用redis频道和nginx。我可以与一个用户连接并使用我的应用程序,但是一旦创建了第二个连接,旧(原始)客户端将停止接收web套接字信息,但它仍然可以发送它。My consumers.py接收所有websocket数据,但认为这些数据都来自最新的连接。这意味着第一个ws连接确实关闭,但停止接收信息
版本:
Python = 3.9.2
Django = 3.1.7
Channels = 3.0.3
channels-redis = 3.2.0
redis = 5.0.3
我已经能够从消费者内部和外部发送websocket信息来处理webhook响应,但我无法处理消费者上的多个连接
Nginx配置:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream websocket {
server 127.0.0.1:8000;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Formwarded-Host $server_name;
} # end location
} # end server
} # end http
消费者(减少):
如果您需要更多信息,请告诉我 我在为我的WebSocket定义路由时遗漏了.as_asgi(),这意味着我创建的每个实例都会被我创建的下一个实例覆盖
My routing.py现在看起来像:
application = ProtocolTypeRouter({
'websocket': AllowedHostsOriginValidator(
AuthMiddlewareStack(
URLRouter(
[
url("calling/interface/", ChatConsumer.as_asgi()),
]
)
)
)
})
application = ProtocolTypeRouter({
'websocket': AllowedHostsOriginValidator(
AuthMiddlewareStack(
URLRouter(
[
url("calling/interface/", ChatConsumer.as_asgi()),
]
)
)
)
})