Невозможно обрабатывать websocket и xhr-запрос одновременно, используя Nginx + uwsgi + django - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь использовать Nginx + uwsgi + django, чтобы создать веб-сайт, где для одной из задач требуется websocket.Система хорошо работает на сервере Django (Python manage.py runserver).Однако, когда я делаю это на AWS, используя Nginx + uwsgi, sth идет не так.Хотя я изменяю настройки Nginx + uwsgi, я нахожу, что сервер не может обрабатывать запросы websocket и xhr одновременно

Конкретные проблемы заключаются в следующем:

1), если я запускаю uwsgi с помощьюuwsgi --socket :8001 --module project.wsgi --http-websockets, веб-сокет может быть установлен, но сообщение в «request.websocket» django всегда отсутствует, и в журнале uwsgi отображается warning: async call without async mode.

2) Далее я пытаюсь использовать асинхронный режим вУссги uwsgi --socket :8001 --module project.wsgi --http-websockets --async 10 --ugreen.В этом случае веб-сокет работает хорошо, но другие запросы xhr блокируются и не могут быть обработаны сервером, пока веб-сокет не завершится.Например, если один клиент выполняет задачу с помощью веб-сокета, другие клиенты не могут даже войти в Интернет.

Не могли бы вы помочь мне с этой проблемой?

Заранее спасибо!

1 Ответ

0 голосов
/ 22 февраля 2019

Вы можете добавить следующий фрагмент в соответствии с вашими потребностями в файл конфигурации nginx, расположенный в sites-available.

Это позволит вам получить доступ к веб-сокетам по URL ws://wsbackend/wspath/

location /ws/ {
        proxy_pass http://unix:/tmp/lcs_daphne.sock;
        proxy_http_version 1.1;

        proxy_read_timeout 86400;
        proxy_redirect     off;

        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        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-Forwarded-Host $server_name;
    }

Thisявляется протоколом переключения, который обновляет http запрос до ws запроса.

Вы можете обратиться к этой документации для получения дополнительной информации о реализации websockets с использованием nginx

...