我们目前正在使用django和django-omnibus(websockets)开发应用程序。 我们需要定期从服务器(django)通过websockets向所有连接的客户端发送更新。
问题是,我们无法使用cron或其他与之相关的工作。我已经编写了一个manage.py命令但是由于某些限制,如果python manage.py updateclients启动了发送器,那么omnibus似乎无法将消息发送到websocket。
我知道django不是为这种东西设计的,但有没有办法在正在运行的django实例中发送更新?
感谢您的帮助!
答案 0 :(得分:2)
您无法使用cron
的原因是因为您的托管环境没有cron
吗? ...或因为"如果发射器是python manage.py"似乎综合不能将消息发送到websocket。 ?
如果您根本没有cron
,那么您需要找到https://apscheduler.readthedocs.org/en/latest/等替代方案,或者Celery也提供预定任务。
但如果问题是另一方:"一种在正在运行的django实例本身内发送更新的方法"那么我建议一个简单的选择是在你的Django应用程序中添加一个HTTP API。
例如:
# 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
代码就可以在与omnibus龙卷风服务器有活动连接的Django实例中运行。
您可能希望通过您的网络服务器或此类内容对此网址进行一些访问控制:
https://djangosnippets.org/snippets/2095/