【问题标题】:What is the best approach to use Web Sockets with Django projects?在 Django 项目中使用 Web Sockets 的最佳方法是什么?
【发布时间】:2015-09-24 04:22:04
【问题描述】:

我开始着手处理一个需要套接字的新 Django 项目。我搜索了互联网并找到了 thisthis 教程。还有很多过时的东西。

谁能推荐在 Django 中使用套接字的最佳方法?我正在使用 Django 1.7。谢谢。

【问题讨论】:

  • 你是指 websocket 还是什么?
  • 这是即将到来的工作,它将为 django 提供对 websockets 的原生支持 - github.com/andrewgodwin/django-channels 但它还没有完成。
  • 哦,谢谢@kmmbvnr。这是你正在做的事情吗?如果是,您认为什么时候可以完成?
  • 这是 Django 核心团队之一的 Andrew Godwin 的作品。

标签: python django node.js sockets socket.io


【解决方案1】:

参见Django Channels 项目。

Channels 是一个让 Django 能够处理的不仅仅是 普通的 HTTP 请求,包括 WebSockets 和 HTTP2,以及 在发送响应后运行代码的能力,例如 缩略图或背景计算。

【讨论】:

    【解决方案2】:

    django 基本上不支持 Websockets,因为 django 基于不支持 websockets 的 WSGI。我最好的建议是在需要 websockets 的地方使用 tornado 之类的东西。您应该能够在 tornado 中访问您的所有模型(如果您愿意,也可以使用 django 模板系统)您只是缺少 django url 系统,因为 tornado 有自己的。

    您提供的建议也可以,但它们基于 Socket.IO,即 javascript。如果您对服务器端的 javascript 感到满意(您在客户端并没有太多选择),那么任何一个都可以。如果你想要python,看看tornado。

    【讨论】:

      【解决方案3】:

      嗯,这不是一个简短的话题。

      Django 是阻塞框架,所以它不能以异步方式工作。 你需要像http://autobahn.ws 这样的东西,它有websocket 实现(在twisted 或asyncio 上运行,这取决于你使用的python 版本)。

      Authobahn 将作为外部服务运行,您的客户将连接到它。 如果您需要将其与 django 连接,django 可以将事件发布到 websocket worker(例如通过 HTTP 或您喜欢的其他协议),然后 websocket worker 会将您的事件发布到客户端。

      【讨论】:

        【解决方案4】:

        我已经成功地使用了 gevent-websocket 和 django 以及 socketio。您必须使用特殊的runserver_socketio-command 来允许 websocket 连接。

        【讨论】:

          猜你喜欢
          • 2010-12-14
          • 1970-01-01
          • 1970-01-01
          • 2020-10-21
          • 2019-08-07
          • 2010-09-30
          • 1970-01-01
          • 1970-01-01
          • 2019-12-14
          相关资源
          最近更新 更多