使用Django

时间:2018-02-14 19:37:34

标签: django uwsgi django-channels daphne

我目前正在运行一台Django(2.0.2)服务器,uWSGI有10名工作人员

我尝试实时聊天,然后看了Channel。 文档提到服务器需要使用Daphne运行,Daphne需要一个名为ASGI的UWSGI的异步版本。

我管理安装和设置ASGI,然后用daphne运行服务器,但只有一个工作者(我理解的是ASGI的限制),但是工作负载太高了。

是否可以使用带有10个工作程序的uWSGI运行服务器来回复HTTP / HTTPS请求并使用ASGI / Daphne进行WS / WSS(WebSocket)请求? 或者也许可以运行ASGI的多个实例?

1 个答案:

答案 0 :(得分:9)

可以在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/,您需要输入以下网址:

ws://localhost/ws/your_path

然后nginx将能够升级连接。