Websockets, React + Django
Мне интересно, есть ли окончательный ответ по использованию Websockets, React и Django.
Из того, что я прочитал (1) предпочтительный способ связать React с Django - использовать Django Rest Framework (DRF.) (2) Предпочтительный способ использовать websockets в Django, похоже, через Django Channels. (3) А предпочтительный способ использования сокетов в React - это Socket.io.
Итак, кажется, что связать все три варианта довольно сложно. Я вижу два возможных решения, которые оба могут быть правильными.
- React uses Socket.io and passes communicates w/ the backend via DRF.
- React is rendered through a Django template and websockets are leveraged via Channels.
Я представляю, что #2 - это путь с большим количеством головных болей, так как Django - это фреймворк с большим количеством мнений.
Есть ли окончательный ответ на вопрос о том, как следует использовать Websockets, React и Django вместе? ( Этот вопрос практически не получил отклика.)
Редактировать Менее предпочтительный вариант 3: использовать React, Node & Express для большей части приложения, включая websockets и DRF исключительно для вещей, в которых python действительно сияет (например, конвейеры ML)
Нет однозначного ответа (и я думаю, что его и не должно быть) по поводу использования вебсокет, React и Django. Это разные технологии, хотя они могут быть хорошо связаны между собой. Как их соединить - решать вам. Лучший подход - использовать их для достижения требований вашего проекта с наиболее простой общей архитектурой.
Некоторое время назад я создал пример проекта, который использовал:
- Django для backend (Django Rest Framework, Django Channels и Celery),
- React для фронтенда (взаимодействие с REST API и WebSockets с помощью
ws)
Проект доступен на GitHub: https://github.com/pplonski/simple-tasks
Проект был развернут с помощью docker-compose (docker-compose.yml файл) и имеет следующие компоненты:
- nginx, обслуживающий React
- wsgiserver, обслуживающий REST API
- asgiserver обслуживает websocekts
- rabbitmq & redis для Celery
- worker & listeners для Celery
Проект заключался в выполнении простой суммы двух чисел и сна. Задача вычислялась в фоновом режиме с помощью Celery, и я использовал websockets для живого общения о прогрессе (каждые 1 секунду сна обновление отправлялось клиенту).
Стек React+Django - мой предпочтительный стек, потому что я работаю над многими проектами Data Science/Machine Learning.