Python彗星服务器
我正在构build一个Web应用程序,该应用程序具有我想通过长轮询机制进行更新的实时Feed(类似于Facebook的新闻源)。 我知道用Python,我的select很多都是使用Stackless(从他们的Comet wsgi示例构build)或Cometd + Twisted。 不幸的是,有关这些选项的文档很less,我不能在网上find有关Python的彗星生产规模用户的良好信息。
有没有人在生产系统上成功地实现Python的彗星? 你是怎么做到的?在哪里可以find资源去实现我自己的?
我build议你使用StreamHub Comet Server – 它被很多人使用 – 亲自使用它与我运行的几个Django站点。 您将需要编写一点Java来处理stream – 我使用Jython来完成此操作。 前端代码是一些真正简单的Javascript一拉:
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文档,如果您需要:
- Javascript API JSDoc
- 从Java Javadocstream
轨道似乎是一个不错的解决scheme。 还没有尝试过。
更新 :在过去的2.5年里,事情已经发生了变化。
我们现在在所有主stream浏览器中都有websocket,除了IE(自然)和一些非常好的抽象,它提供了很多仿真实时通信的方法。
- socket.io连同tornadio (socket.io 0.6)和tornadio2 (socket.io 0.7+)
- sock.js以及SockJS龙卷风
下面是一个全function的例子,结合Django,Orbited和Twisted来创build一个实时(Comet)应用程序: http ://github.com/clemesha/hotdot使用Python。
我已经做了大量的API使用扭曲这样的东西,其中大部分可在我的github帐户。
大部分都是客户端的,但是懒惰是我写的一个服务器来做一个实时的廉价pubsub的东西。 通过允许简单的stream复制,它可以水平地进行读取。 当你坚持使用简单的HTTP时,写入会有点不同,但是我已经通过一个演示文稿推出了相当不错的数量。
否则,您将拥有大多数XMPP服务器支持的全functionBOSH,并允许您将消息分发与Web前端分离。
我没有这样做,但是这个人写了一篇关于它的好文章,用Django的例子和指针(我没有检查过)给其他的框架。
轨道和redis的解决scheme是不错的,但是当你有像谷歌发布的PubSubHubbub的东西时,不再相关。 这使得成为给定Feed的发布者或订阅者变得非常容易。 http://code.google.com/p/pubsubhubbub/
下面是一个用gevent和Django进行长时间轮询的例子 。
它使用Stacklet的greenlet -stack切换function打包为CPython扩展。