#django #websocket
#django #websocket
Вопрос:
В настоящее время мы разрабатываем приложение с django и django-omnibus (websockets). Нам нужно регулярно отправлять обновления с сервера (django) всем подключенным клиентам через websockets.
Проблема в том, что мы не можем использовать cron или что-то связанное с этим для выполнения работы. Я написал manage.py команда, но из-за некоторых ограничений кажется, что omnibus не может отправить сообщение в websocket if launcher с помощью python manage.py обновляемые клиенты.
Я знаю, что django не предназначен для такого рода вещей, но есть ли способ отправлять обновления внутри самого запущенного экземпляра django?
Спасибо за помощь!
Комментарии:
1. Проверьте сельдерей: celeryproject.org
Ответ №1:
Является ли причина, по которой вы не можете использовать cron
, потому что ваша среда хостинга не имеет cron
? …или потому, что «кажется, что omnibus не может отправить сообщение в websocket, если launcher с помощью python manage.py » ?
Если у вас просто нет cron
, вам нужно найти альтернативу, такую как https://apscheduler.readthedocs.org/en/latest / или Сельдерей также предоставляет запланированные задачи.
Но если проблема в другой стороне: «способ отправки обновлений в самом запущенном экземпляре django», тогда я бы предложил простой вариант — добавить HTTP API в ваше приложение Django.
Например:
# views.py
from django.core.management import call_command
def update_clients(request):
call_command('updateclients')
return HttpResponse(status=204)
Затем на вашем crontab вы можете сделать что-то вроде:
curl 127.0.0.1/internalapi/update_clients
… и таким образом, ваш updateclients
код может выполняться в экземпляре Django, который имеет активное соединение с сервером omnibus tornado.
Вероятно, вам нужен некоторый контроль доступа к этому URL-адресу либо через ваш веб-сервер, либо что-то вроде этого:
https://djangosnippets.org/snippets/2095/