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

我正在开始一个需要套接字的新Django项目。 我search了互联网,发现这个和这个教程。 那里也有很多过时的东西。

任何人都可以推荐使用套接字与Django的最佳方法? 我正在使用Django 1.7。 谢谢。

django基本上不支持Websocket,因为django基于不支持websocket的WSGI。 我最好的build议是在你需要websocket的地方使用诸如龙卷风之类的东西。 你应该能够访问龙卷风中的所有模型(如果你愿意的话,也可以使用django模板系统),因为龙卷风有它自己的特性,你只会缺lessdjango的url系统。

你给的build议也会起作用,但是它们是基于Socket.IO,它是javascript。 如果你对服务器端的javascript感到满意(你在客户端上没有太多的select),那么任何一个都可以。 如果你想Python,看看龙卷风。

那么这不是一个简短的话题。

Django阻止框架,所以它不是在asynchronous风格工作。 你需要像http://autobahn.ws这样的东西,它有websocket的实现(运行在扭曲或asynchronous,它取决于你使用的是什么版本的Python)。

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

我用socketio成功地使用了gevent-websocket和django。 您必须使用特殊的runserver_socketio命令来允许websocket连接。

请参阅Django Channels项目。

Channels是一个使Django能够处理的不仅仅是简单的HTTP请求(包括WebSockets和HTTP2)以及在发送响应(例如缩略图或背景计算)之后运行代码的能力的项目。