我正在构建一个 Web 应用程序,该应用程序具有我想通过长轮询机制更新的实时提要(类似于 Facebook 的新闻提要)。我知道对于 Python,我的选择几乎是使用 Stackless(从他们的 Comet wsgi 示例构建)或 Cometd + Twisted。不幸的是,关于这些选项的文档很少,我在网上找不到关于 Python 上的彗星生产规模用户的良好信息。
有没有人在生产系统中成功地在 Python 上实现了彗星?你是怎么做的,我在哪里可以找到资源来实现我自己的?
我正在构建一个 Web 应用程序,该应用程序具有我想通过长轮询机制更新的实时提要(类似于 Facebook 的新闻提要)。我知道对于 Python,我的选择几乎是使用 Stackless(从他们的 Comet wsgi 示例构建)或 Cometd + Twisted。不幸的是,关于这些选项的文档很少,我在网上找不到关于 Python 上的彗星生产规模用户的良好信息。
有没有人在生产系统中成功地在 Python 上实现了彗星?你是怎么做的,我在哪里可以找到资源来实现我自己的?
我建议你应该使用StreamHub Comet Server——它被很多人使用——我个人将它与我运行的几个 Django 站点一起使用。您将需要编写一点点 Java 来处理流式传输 - 我使用Jython完成了这项工作。前端代码是一些真正简单的 Javascript a la:
StreamHub hub = new StreamHub();
hub.connect("http://myserver.com/");
hub.subscribe("newsfeed", function(sTopic, oData) { alert("new news item: " + oData.Title); });
文档非常好 - 当您尝试开始使用 Cometd 等人的稀疏文档时,我遇到了类似的问题。首先,我会阅读Comet 和 StreamHub 入门,下载并查看一些示例如何工作,如果需要,请参考 API 文档:
这是一个结合 Django、Orbited 和 Twisted 以创建实时(彗星)应用程序的全功能示例:http://github.com/clemesha/hotdot使用Python。
我还没有这样做,但是这个人已经写了一篇关于它的好文章,其中包含 Django 示例和指向其他框架的指针(我没有检查过)。
轨道和 redis 解决方案很好,但当你有类似谷歌发布的 PubSubHubbub 时不再相关。这使得成为给定提要的发布者或订阅者变得非常容易。http://code.google.com/p/pubsubhubbub/
这是一个使用 gevent 和 Django 进行长轮询的示例。
它使用greenlet - 来自 Stackless 的堆栈切换功能,打包为 CPython 扩展。