Всем привет.
Архитектура такова: Django REST API (бекенд), и 3 клиента (фронт): angular,ios,android.
Возникла необходимость в подключении real-time уведомлений.
Какой подходят является приемлемым в данном случае? Что лучше (или как) использовать?
Django+Tornado+web-socket?
Спасибо.
mr_drinkens89: Заменяет. Channels в себе содержит асинхронный сервер, который принимает веб-сокет соединения. Плюс инструменты, которые позволяют передавать сообщения между этим сервером и синхронной джангой.
Макс Полетаев: Теперь возникла проблема с деплой) На сервере настроено https для api.server.com. То есть все запросы идут на api.server.com.
Делал все по туториалу https://khashtamov.com/2016/04/django-channels-web..., через Redis. Когда же перехожу к тестированию, ввожу в консоли ws (или wss) - 400 или 404 ошибка
Возможно ли это из-за того, что используемый Daphne не работает с https?
спасибо
mr_drinkens89: Если Daphne у вас не торчит наружу голый, а стоит за Nginx, то ему без разницы, https там или нет. Чтобы в Nginx заработали вебсоветы, нужно подкрутить конфиг: nginx.org/en/docs/http/websocket.html
Макс Полетаев: Daphne я подключаю как: daphne asgi:channel_layer (через supervisor). Выходит, что только в Nginx необходимо указать конфиг для веб-сокетов?))
Макс Полетаев: все равно получаю либо 404 либо 502 ошибку...
в Nginx у меня указано:
1. для location / - proxy_pass на unix сокет, который уже ловит gunicorn.
2. для location /socket/ я подключаю конфиги, которые указаны для nginx (подключение сокета).
Понять не могу, верно ли указываю в location /socket/{ proxy_pass http://localhost:8080;} или же нет?
Макс Полетаев: поставил порт 9595 и в nginx также указал для веб-сокетов 9595 - заработало, запрос ушел, пришел ответ)
Только странно, закинул python manage.py runworker -v2 в supervisor. Поработает немного, после падает.
если же в консоли запустить python manage.py runworker -v2 - все "держится" и работает)
Макс Полетаев: Возможно, я не до конца понимаю всего механизма. Пробую на простейшем Echo(). Добавил, как написано в инструкции (websocket_receive), все работает - алерт вылетает. ОК
Далее, пробую уже на роутинге:
Добавил следующее:
Но, когда выполняю аналогичный запрос (по маршруту), в консоли вижу, что идет " websocket.connect", потом пауза...и "websocket.disconnect". Ну и вылезает 502 ошибка.
По сути, я хочу воспроизвести тоже "эхо", только более правильное.
Не могу вразумить, почему такое происходит?
Спасибо.