Django:通过 websocket 定期发送更新
Posted
技术标签:
【中文标题】Django:通过 websocket 定期发送更新【英文标题】:Django: Send regularly updates over websocket 【发布时间】:2014-06-17 15:28:36 【问题描述】:我们目前正在使用 django 和 django-omnibus (websockets) 开发应用程序。 我们需要通过 websockets 从服务器(django)定期向所有连接的客户端发送更新。
问题是,我们不能使用 cron 或相关的东西来完成这项工作。我已经编写了一个 manage.py 命令,但是由于一些限制,如果启动器通过 python manage.py updateclients,综合总线似乎无法将消息发送到 websocket。
我知道 django 不是为这类东西设计的,但有没有办法在运行的 django 实例本身内发送更新?
感谢您的帮助!
【问题讨论】:
检查芹菜:celeryproject.org 【参考方案1】:你不能使用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
代码可以在与综合龙卷风服务器具有活动连接的 Django 实例中运行。
您可能希望通过您的网络服务器或类似的方式对该网址进行一些访问控制:https://djangosnippets.org/snippets/2095/
【讨论】:
以上是关于Django:通过 websocket 定期发送更新的主要内容,如果未能解决你的问题,请参考以下文章
Django - 通过 websocket 在事件上重复发送 API 调用结果(REST 框架 + 通道)