Django ASGI通道应用程序未跟踪多个websocket客户端(使用redis和nginx) 编辑:

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( [

在为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()),
                ]
            )
        )
    )
})
原始问题: 我有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()),
                ]
            )
        )
    )
})