Django: регулярно отправлять обновления через websocket

#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/