回答が書かれた時から(2012年); 多くのことが変わりました。
システムのリアルタイム更新を行うための推奨される方法は、websocket を使用することです。これは、標準のRFC 6455として形式化および提案されています。MDN のこのページには、テクノロジーの優れた概要があります。
もう 1 つの新しいテクノロジは、W3C ドラフト案であるServer Sent Eventsです。
swampdragonやdjango-socketioなどのプロジェクトを使用すると、リアルタイム機能をプロジェクトに簡単に統合できます。
リアルタイム システムには、次の 2 つの主要コンポーネントがあります。
- ブラウザからサーバーへの開いたままの接続。
- この接続をリッスンしてから応答するサーバー。
- メッセージを保存して通知するためのシステム / 標準。
よし、たぶん 3 つのコンポーネント。
django はリアルタイムで動作しないため、リアルタイムのプッシュ/更新を提供するソリューションでは、別のサーバー/サービスがメッセージを受け入れ、保留中のメッセージをリスナーに通知する必要があります。
Django は、チャネル (キュー/バケット) でこのサーバーにメッセージをプッシュ (書き込み) するアプリケーションです。次に、リスナーはチャネルにサブスクライブして、メッセージの通知を受けます。接続は開いたままなので、メッセージは「リアルタイム」で取得されます。
Django は、これらすべてにおいて最小限の役割しか持っていません。リアルタイム通知が機能するために必要な 3 つのコンポーネントを提供するさまざまな実装があります。
設定が非常に簡単で、サーバー側のコンポーネントに関して多くを必要としない node.js を使用するため、私はjuggernautが本当に好きです。私がそれを好むもう 1 つの理由は、WebSocket に加えて Adobe Flash Socket をサポートしているためです (その他については、リンクを参照してください)。
それにアクセスするためのAPIも非常に簡単です-実際、すでにredisを使用している場合(非常に使いやすいので、本当にそうすべきです)、メッセージをredisにドロップでき、ジャガーノートがそれらを読み取るため、別のAPIは必要ありません、またはその Python API を使用できます。このフラスコのスニペットからの簡単な例:
メッセージをチャネルに送信 (書き込み) します。
>>> from juggernaut import Juggernaut
>>> jug = Juggernaut()
>>> jug.publish('channel', 'The message')
それを聞きなさい:
<script type=text/javascript
src=http://localhost:8080/application.js></script>
<script type=text/javascript>
var jug = new Juggernaut();
jug.subscribe('channel', function(data) {
alert('Got message: ' + data);
});
</script>