我们目前正在使用django和django-omnibus (websockets)开发一个应用程序。我们需要通过websockets定期从服务器(django)发送更新到所有连接的客户端。
问题是,我们不能使用cron或相关的东西来做这项工作。我写了一个manage.py命令,但由于一些限制,似乎omnibus不能发送消息到websocket,如果通过python manage.py updatclients启动。
我知道django不是为这种东西设计的,但是有一种方法可以在运行的django实例本身发送更新吗?
谢谢你的帮助!
您不能使用cron
的原因是因为您的主机环境没有cron
吗?…还是因为"如果python manage.py启动器,omnibus似乎无法将消息发送到websocket " ?
如果你根本没有cron
,那么你需要找到一个替代品,如https://apscheduler.readthedocs.org/en/latest/或芹菜也提供计划任务。
但是如果问题在另一边:"在运行的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
代码就可以在Django实例中运行,这个Django实例与综合龙卷风服务器有活跃的连接。
你可能想对这个url进行一些访问控制,要么通过你的web服务器,要么像这样:
https://djangosnippets.org/snippets/2095/