31

我正在构建一个 Web 应用程序,该应用程序具有我想通过长轮询机制更新的实时提要(类似于 Facebook 的新闻提要)。我知道对于 Python,我的选择几乎是使用 Stackless(从他们的 Comet wsgi 示例构建)或 Cometd + Twisted。不幸的是,关于这些选项的文档很少,我在网上找不到关于 Python 上的彗星生产规模用户的良好信息。

有没有人在生产系统中成功地在 Python 上实现了彗星?你是怎么做的,我在哪里可以找到资源来实现我自己的?

4

7 回答 7

13

Orbited似乎是一个不错的解决方案。虽然没试过。


更新:在过去的 2.5 年里,情况发生了变化。

我们现在在所有主要浏览器中都有 websockets,除了 IE(自然)和一些非常好的抽象,它们提供了许多模拟实时通信的方法。

于 2009-08-01T15:27:37.613 回答
9

我建议你应该使用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 文档:

于 2009-08-21T00:41:01.320 回答
6

这是一个结合 Django、Orbited 和 Twisted 以创建实时(彗星)应用程序的全功能示例:http://github.com/clemesha/hotdot使用Python。

于 2009-11-06T20:49:39.810 回答
4

我已经使用twisted 完成了大量的API,其中大部分都可以在我的github帐户上找到。

大多数都是客户端,但slosh是我编写的用于执行实时廉价 pubsub 之类的服务器。通过允许简单的流复制,它可以在一定程度上水平扩展读取。当您坚持使用纯 HTTP 时,写入会有所不同,但我已经通过它进行了大量的演示。

否则,您将拥有大多数 XMPP 服务器支持的完整 BOSH,并且允许您将消息分发与 Web 前端分离。

于 2009-06-07T04:18:34.740 回答
2

我还没有这样做,但是这个人已经写了一篇关于它的好文章,其中包含 Django 示例和指向其他框架的指针(我没有检查过)。

于 2009-06-07T01:22:44.667 回答
1

轨道和 redis 解决方案很好,但当你有类似谷歌发布的 PubSubHubbub 时不再相关。这使得成为给定提要的发布者或订阅者变得非常容易。http://code.google.com/p/pubsubhubbub/

于 2010-02-20T20:21:08.170 回答
1

这是一个使用 gevent 和 Django 进行长轮询的示例

它使用greenlet - 来自 Stackless 的堆栈切换功能,打包为 CPython 扩展。

于 2010-04-10T05:17:08.967 回答