Django、websockets、Tornado,如何让它们通信?
Posted
技术标签:
【中文标题】Django、websockets、Tornado,如何让它们通信?【英文标题】:Django, websockets, Tornado, how to make them communicate? 【发布时间】:2013-08-02 08:31:46 【问题描述】:所以我读到,目前使用 Django 实现 websockets 的最佳选择是使用 Tornado 运行 websocket 服务器。
好的,我明白了。
但是假设我想在我的 django 应用程序中发生任何事情时通过 websocket 服务器广播消息,例如:网络设备突然离线,我希望网络管理员立即得到通知。
我能想到的自然过程是向设备模型注册一个信号,每当发生有趣的事情时,我必须能够告诉 Tornado:嘿,伙计,向所有连接的管理员发送一条广播消息。
但是我该怎么做呢?
也许有某种发布/订阅机制?芹菜?
有没有关于这个东西的文章?这很有趣,但还没有找到任何正确解释的真实用例。
谢谢!
编辑:工作原型
在接受了答案中的建议后,我想出了这个: https://github.com/ninuxorg/nodeshot/commit/26373a3478d77a8cc8ac8bbd0c1c45694c26a779
【问题讨论】:
我正在尝试做同样的事情。 Django 现在可以使用 Redis 运行 websockets:django-websocket-redis.readthedocs.io/en/latest 并且您也有适用于 Django 和 tornado websockets 的解决方案:django-tornado-websockets.readthedocs.io/en/latest 【参考方案1】:在进程之间进行通信的规范方法是队列(或管道)。我不确定multiprocessing
包中的队列是否有效。如果这不起作用,您可以在文件系统上创建一个命名管道并使用os.mkfifo
通过管道进行通信。
【讨论】:
在接受了答案中的建议后,我想出了这个原型:github.com/ninuxorg/nodeshot/commit/… 虽然肯定有更好的选择。以上是关于Django、websockets、Tornado,如何让它们通信?的主要内容,如果未能解决你的问题,请参考以下文章
Tornado WebSocket 与 Django ORM 与共享会话
websocket[tornado] 的单个实例可以处理不同的请求吗?