我已经阅读了有关Django和HTTP Push的所有问题和答案。然而,没有一个提供关于如何完成所谓“彗星”功能的基本“hello world”的清晰,简洁,开端到终端的解决方案。
第一个问题(1):HTTP在多大程度上没有(至少到目前为止)为此做出的问题?所有潜在的解决方案都是黑客攻击吗?
2)目前最好的解决方案是什么?
其他一些解决方案?
3)nginx推送模块如何参与此讨论?
4)这些解决方案中的哪一个需要替换典型的mod_wsgi / nginx(或apache)部署模型?他们为什么要这个?在任何情况下这都是有利的过渡吗?
5)使用Python中已有的解决方案的优势有多大?
Alex Gaynor在PyCon 2010上发表的演讲,我刚刚在blip.tv上观看过,它非常精彩且内容丰富,但对Django中HTTP Push的当前状态并不十分特别。他说的一件事给了我一些信心:Orbited在抽象和模拟网络套接字的概念方面做得很好。因此,当WebSockets实际着陆时,我们将处于转型的好地方。
6)HTML5 Websockets与当前解决方案有何不同? Gaynor对Orbited过渡的容易程度的评估是否准确?
答案 0 :(得分:24)
答案 1 :(得分:7)
支持django-websocket的WebSockets,但遗憾的是它有很多问题需要它才能正常工作;这是该页面的引用:
Disclaimer (what you should know when using django-websocket)
BIG FAT免责声明 - 目前技术上 NOT 可以以任何方式使用带有WSGI的websocket。这是一个已知问题,但由于在编写WSGI标准时做出的一些设计决策,无法以干净的方式解决这个问题。此时像Websockets等的东西不存在,也不可预测。
...
但不仅WSGI是限制因素。 Django本身是围绕一个简单的请求响应场景设计的,没有考虑Websockets。这也意味着现在不可能为django提供标准的符合websocket实现。然而,它以一种不那么漂亮的方式工作。所以请注意,使用django-websocket时,tcp套接字可能会受到折磨。
目前,WSGI:没有去; Django:即使使用django-websockets也几乎没有任何进展;另见作者original announcement中的评论:
我不能说这看起来是个好主意。你正在以一种需要线程的方式进行长期连接。 django-websocket需要线程设置,如果你有进程(因为你只有太多的进程),它将无法工作,但是线程也不能同时扩展到很多连接,所以它只是虚假的安全。你需要一个用于长寿命的异步平台,我通过在Django中使用我的应用程序以及在Node.js中使用我的彗星和websocket来实现这一点
就个人而言,如果尝试使用WebSockets(我希望明年会这样),我会首先尝试Twisted和Cyclone的组合。它们旨在应对WebSockets,并且可以很好地扩展。如果您正确编写代码以删除对Django的不必要的依赖,那么您应该能够在基于Twisted的系统中使用大部分代码。与使用Node.js或Comet或其他语言的任何系统相比,这是一个非常明显的优势。你也可以做一个简单的推送
最后,你还可以决定它太难了并使用外部服务来提供推送支持。那就变成了向他们的服务器发送一个简单的JSON请求,而不是担心如何建立连接以及并发将如何工作以及类似的事情。当然,您需要为此付费(虽然目前在Beta版本中可能是免费的),但您无需担心实施细节;你不会拥有WebSockets的全部功能 - 只需推动支持。
答案 2 :(得分:1)
问题#2,我最近参观了一个大量使用Comet的Django应用程序的内部,Orbited是他们选择的解决方案。
答案 3 :(得分:1)
自从我提出这个问题以来,我无法相信这已经过去了六年。
与Django异步(以及相关的网络流量,例如websockets)对于我们社区中的许多人来说都是一个痒。过去几年我采取了这些措施,除其他外,抓住了这个痒。
hendrix是一个在Twisted上运行的WSGI / ASGI conatiner。它是一个主要由5位爱好者推动的项目,得到了一些有远见的组织的帮助和资助。它现在正在生产数十家,但不是数百家公司。
我会留给您阅读文档以了解为什么它是解决此问题的最佳解决方案,但有几个快速亮点:
请参阅我在Django-NYC(在Buzzfeed办事处)提供的this talk,了解有关我认为这是此问题的最佳答案的原因的更多信息。