Как запустить Gunicorn, все еще используя WebSocket - PullRequest
1 голос
/ 30 января 2020

Так что я использую docker для этого python проекта приложения чата.

У меня изначально была python manage.py runserver 0.0.0.0:8000 в качестве команды в docker -compose.

Я обнаружил, что должен перейти на gunicorn, если я хочу развернуть свое приложение в Интернете (например, heroku). В учебнике, который я нашел, просто измените команду в docker -compose на gunicorn myproject.wsgi -b 0.0.0.0:8000. Я сделал это, и все соединения с веб-сокетами прервались. Ошибка отправки из-за того, что websocket все еще находится в состоянии CONNECTING, затем через некоторое время происходит сбой рукопожатия с кодом состояния 404. Все настройки были такими же, как и раньше, за исключением одной строки. Просто интересно, что еще мне нужно изменить, чтобы заставить websocket работать с gunicorn? * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *, То, что "gunicorn" не должен запускаться с websocket (я полагаю, разница wsgi asgi)? gunicorn для веб-сервера, это было бы чрезвычайно признательно, или если есть какой-нибудь способ, которым я могу запустить gunicorn с моими django каналами, которые все еще работают? Спасибо !!

1 Ответ

1 голос
/ 30 января 2020

При использовании ASGI для асинхронных серверов (веб-сокетов) вы должны использовать асинхронный сервер, такой как Daphne или Uvicorn, в документации Django есть примеры того, как выполнить развертывание для них обоих.

Если вы хотите использовать uvicorn напрямую, вы можете сделать что-то вроде:

uvicorn myproject.asgi:application --host 0.0.0.0 --port 8000

Вы также можете запустить uvicorn через gunicorn, используя рабочий класс:

gunicorn myproject.asgi:application -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000
...