web-dev-qa-db-ja.com

Python Comet Server

ロングポーリングメカニズムを介して更新したいリアルタイムフィード(Facebookのニュースフィードに類似)を持つWebアプリケーションを構築しています。 Pythonの場合、私の選択は、Stackless(Comet wsgiの例から構築)またはCometd + Twistedのいずれかを使用することであると理解しています。残念ながら、これらのオプションに関するドキュメントはほとんどなく、Pythonでのcometの実稼働規模のユーザーに関する適切な情報をオンラインで見つけることができません。

誰かが本番システムでPythonにcometを正常に実装しましたか?どのようにそれを実行しましたか?また、自分で実装するためのリソースはどこにありますか?

31
HenryL

使用することをお勧めします 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ドキュメントを参照してください。

9
Supertux

Orbited は素晴らしい解決策のようです。しかし、それを試していません。


更新:過去2。5年間で状況が変化しました。

IE(当然のことながら)と、リアルタイム通信をエミュレートする多くの方法を提供するいくつかの非常に優れた抽象化を除いて、すべての主要なブラウザーにWebSocketがあります。

13
Emil Ivanov

Django、Orbited、Twistedを組み合わせてリアルタイム(Comet)アプリを作成するフル機能の例を次に示します。 http://github.com/clemesha/hotdot Pythonを使用します。

6
clemesha

私はそのようなもののためにtwistedを使用してたくさんのAPIを実行しましたが、そのほとんどは私の github アカウントで利用できます。

ほとんどはクライアント側ですが、 slosh は、リアルタイムで安価なpubsubのようなことを行うために私が作成したサーバーです。単純なストリームレプリケーションを可能にすることで、読み取りに対してある程度水平方向にスケーリングします。プレーンHTTPに固執する場合、書き込みは少し異なりますが、デモのためにかなりの量をプッシュしました。

それ以外の場合は、ほとんどのXMPPサーバーがサポートする完全なBOSHがあり、メッセージ配信をWebフロントエンドから切り離すことができます。

4
Dustin

私はそれをしていませんが、 この男 はそれについての良い記事を持っていて書いています、Django例と他へのポインタ(私はチェックしていません)フレームワーク。

2
Alex Martelli

軌道に乗ったソリューションとredisソリューションは素晴らしいですが、グーグルがリリースしたPubSubHubbubのようなものがある場合はもはや関係ありません。これにより、特定のフィードの発行者または購読者になることが非常に簡単になります。 http://code.google.com/p/pubsubhubbub/

1
Flaviu

これはgeventとDjangoでロングポーリングを行う例です

greenlet --CPython拡張機能としてパッケージ化されたStacklessのスタック切り替え機能を使用します。

1
Denis Bilenko