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 频道或定期 ajax 请求?

Django - 通过 websocket 在事件上重复发送 API 调用结果(REST 框架 + 通道)

如何使用 WebSocket 发送定期消息?

django websockets无法在频道上发送消息

“发送非空 'Sec-WebSocket-Protocol' 标头但未收到响应” Django 频道

WebSocket实现数据库更新前台实时显示