从 Django 发送 websocket 请求

n1_*_*n1_ 5 python django websocket

这是我的交易:

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

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

我花了四天的时间试图弄清楚这一点。我已经用twisted.reacotr写信给autobahn pubsub客户端,但我只能发送一次消息(在我停止reactor完成django请求后,我无法再次启动它,因为它不可重新启动)。

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

ws4py 不支持通道

感谢您的任何建议。伟大的就是一个例子。

obe*_*tet 1

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

以下示例展示了如何将 Flask/WSGI 与 Autobahn 结合使用。Django也可以在 WSGI 容器中运行。

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

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