web-dev-qa-db-ja.com

DjangoでUWSGIとASGIを同時に実行します

私は現在Django(2.0.2)サーバーを実行しています WSGI で10ワーカー

リアルタイムチャットを実装しようとしています。 チャンネル を確認しました。ドキュメントでは、サーバーは Daphne で実行する必要があること、およびDaphneは [〜#〜] asgi [〜#〜] という名前の非同期バージョンのUWSGIが必要であると述べています。

ASGIをインストールしてセットアップし、サーバーをdaphneで実行しますが、ワーカーは1つだけです(ASGIの制限)。

HTTP/HTTPSリクエストに応答し、WS/WSS(WebSocket)リクエストにASGI/Daphneを使用するために、10ワーカーのuWSGIでサーバーを実行することは可能ですか?または、ASGIの複数のインスタンスを実行することは可能ですか?

12
Buky

ASGIと一緒にWSGIを実行することが可能です。これはNginx構成の例です。

server {
    listen 80; 

    server_name {{ server_name }};
    charset utf-8;


    location /static {
        alias {{ static_root }};
    }

    # this is the endpoint of the channels routing
    location /ws/ {
        proxy_pass http://localhost:8089; # daphne (ASGI) listening on port 8089
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    location / {
        proxy_pass http://localhost:8088; # gunicorn (WSGI) listening on port 8088
        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_connect_timeout 75s;
        proxy_read_timeout 300s;
        client_max_body_size 50m;
    }
}

/ws/を正しく使用するには、次のようにURLを入力する必要があります。

ws://localhost/ws/your_path

その後、nginxは接続をアップグレードできます。

10
Kim Desrosiers