在 Django 项目中使用 Web 套接字的最佳方法是什么?

What is the best approach to use Web Sockets with Django projects?

我开始处理一个需要套接字的新 Django 项目。我搜索了 Internet 并找到了 this and this 个教程。那里也有很多过时的东西。

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

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

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

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

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

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

我已经成功使用 gevent-websocket 和 django 与 socketio. You have to use the special runserver_socketio-command,允许 websocket 连接。

参见 Django Channels 项目。

Channels is a project to make Django able to handle more than just plain HTTP requests, including WebSockets and HTTP2, as well as the ability to run code after a response has been sent for things like thumbnailing or background calculation.