从 Django 发送 websocket 请求

Posted

技术标签:

【中文标题】从 Django 发送 websocket 请求【英文标题】:Send websocket request from Django 【发布时间】:2013-10-18 20:38:21 【问题描述】:

这是我的交易:

我有一个用 python 编写的 websocket pubsub 服务器,带有 autobahn websocket(基于 twisted)。 我有一个连接到服务器并订阅了一个频道的简单网站 接下来我有一个简单的 Django 项目和一个应用程序 最后我用 curl 获取请求打开了终端,该请求命中了我的 Django 应用程序

在请求表单 curl 命中我的 django 应用程序和我的视图后,我需要将消息发送到服务器到我的网站订阅的频道。基本上我需要可以向特定通道发送消息并且可以在 django 视图中运行的 websocket 客户端(没有无限阻塞循环)。

我已经尝试了 4 多天来解决这个问题。我已经用twisted.reacotr写了写高速公路pubsub客户端,但我只能发送一次消息(在我停止反应器完成django请求后,我无法再次启动它,因为它不可重新启动)。

我已经尝试过 djagno-socketio,但是有但是,所以当我尝试从 django 视图发送消息时,我看不到客户端。

ws4py 不支持频道

感谢您的任何建议。很好就是一个例子。

【问题讨论】:

How to use autobahn.ws with django?的可能重复 【参考方案1】:

您应该能够在 1 个服务器中运行 Django 和 Autobahn:

这是一个example,它展示了如何将 Flask/WSGI 与 Autobahn 一起使用。并且 Django 可以在 WSGI 容器as well 中运行。

还应该可以使用上述方法从基于 Django/WSGI/Twisted 的服务器运行基于 Autobahn 的 WebSocket 客户端。

重点是:Twisted 可以充当 WSGI 容器,然后在工作线程的后台池上运行 WSGI Web 应用程序(可能是阻塞的)。这将允许您使用 Twisted 的异步功能,例如运行 Autobahn - 客户端或服务器。因此,您可能还会重新考虑整体架构:为什么要将 Autobahn 服务器作为不同的进程运行?

【讨论】:

以上是关于从 Django 发送 websocket 请求的主要内容,如果未能解决你的问题,请参考以下文章

Django:通过 websocket 定期发送更新

如何使用 Django WebSockets 发送实时数据?

以快递方式从 POST 请求处理程序发送 WebSocket 消息

如何在 Django API GET 请求中与 websocket 通信?

Django Channels 没有检测到 NGINX 的 WebSocket 请求

websocket面试题