在 Django 项目中使用 Web Sockets 的最佳方法是啥?

Posted

技术标签:

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

我开始着手处理一个需要套接字的新 Django 项目。我搜索了互联网并找到了 this 和 this 教程。还有很多过时的东西。 谁能推荐在 Django 中使用套接字的最佳方法?我正在使用 Django 1.7。谢谢。

【问题讨论】:

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

【讨论】:

以上是关于在 Django 项目中使用 Web Sockets 的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Django从入门到放弃

Django 框架篇: 一. Django介绍; 二. 安装; 三. 创建项目;

第52篇 WEB框架原理 Django安装与项目的创建

uwsgi部署django项目—报内部错误

django项目部署

python 全栈 web框架 Django基本操作