【发布时间】:2015-01-12 07:26:46
【问题描述】:
我正在尝试使用异步部分做一个 Django 应用程序:Websockets。作为一个小挑战,我想在同一个过程中安装所有内容。尝试了 Socket.IO,但无法真正使用套接字,而不是长轮询(它多次杀死我的浏览器,直到我放弃)。
然后我尝试的是一个基于 gevent-websocket 的维护不那么好的库。但是,有很多错误,不容易调试。
现在我正在尝试 Tornado 方法,但是 AFAIK(如果我错了,请纠正我)将异步与由 WSGIContainer 包装的常规 django 应用程序集成(websockets 将通过 Tornado,通过 Django 进行常规连接)将成为真正的服务器杀手如果资源很重,或者不知何故,Django ORM 会缓慢地进入繁重的操作。
我正在考虑转到 Twisted/Cyclone。在我从一个存在此类问题的架构转移到另一个存在此类问题的架构之前,我想问一下:
Tornado(和/或 Twisted)是否具有与 Gevent 相同的调度任务架构?(这意味着:当某些 greenlet “阻塞”时,它们会将自己调度到其他线程,在至少直到操作完成)。我问这个是因为(如果我错了,请纠正我)常规的 django 视图不适合 @inlineCallbacks 之类的东西,并且会导致整个服务器被阻塞(包括 websockets)。
我是 python 异步编程的新手,所以有一个巨大的变化,我对多个概念有错误的信息。请在我切换之前帮助我澄清这一点。
【问题讨论】:
-
+1 表示非常有趣的主题。今天在 Django 中处理 websocket 的正确方法是什么并不明显。
-
在我看来,这是一场噩梦。当我认为我找到了完美的架构(在一篇博客文章中)时,我了解到 Tornado 不支持开箱即用的 greenlets 之类的东西,并发出 WSGI 请求(Django WSGI 请求有点繁重,并且出于某些目的它们应该是,尽管它们可以得到严重改进)会阻塞整个服务器。不知道该怎么办xDDDD。
标签: django websocket twisted tornado