2011-08-07 12 views
1

の数を減らし、このような何か:ライブ(ロングポーリング)nginxの(またはApache)を介してジャンゴへの接続、 - 私はテーブルを持っているクエリ

class last10msg(models.Model): 
    user = models.ForeignKey(User) 
    date = models.DateField() 
    msg = models.CharField(max_length=254) 

私はクライアント側でテーブルを更新し、長いポーリングを作成したいですDBからテーブル内の最後の10行を持つ側。

最初に、このようなものだった:

ユーザが別の要求を送信table.server応答と、変更または同じdata.thenユーザとJSコード更新テーブルの最後の10行のためのAJAXリクエストを送信します。

私は、データが新しいサーバーであるかどうかをチェックします(最新の日付とクエリの最新の日付をajaxリクエストで送信したものを比較してください)。 ...ユーザーが別の要求を送信します。最後に

私はグローバル実行中の関数へのすべての要求を送信することができると思うと、この関数は、最後のチェックからすべての行を取得し、(ユーザーのフィールドを持つクライアントとからrequest.userから送信された日付と日付を比較)新しく追加された場合関連したビューへの応答を返し、接続なしで応答を表示する(おそらく、クエリーの最後の日付を、次のクエリーでのチェックインのためのユーザー送信日で置き換え、クライアントが最後の日付を明らかに送信するのを待たずに)ユーザーがログアウトしたり、ブラウザを閉じたりしたときに、

しかし、私は本当にこれを実装する方法を知りません。

EDIT 1:

私はこのHTTP_Push_Moduleを見つけましたが、Djangoのための例はないと私の目的のためにグローバルな機能をどのように実装する

EDIT 2:

私はそれが優れていると思いますこの質問の小さな部分を作る。

質問1:link

がどのようにこのようなものを作成するには?

しかし、phpの代わりにDjangoを使用してください。

github.com/slact/nginx_http_push_module/blob/master/tests/test.py

上記では、純粋なのpythonと小さい例である。(私はそれを理解できない)

質問2 : ログインしたユーザーの一覧を取得し、ロングポーリングを行ってログインした各ユーザーに関連する最後の更新された行を返すグローバル関数を作成する方法。あなたの応答を追跡するために少し大変でした(私は何かが欠けていますので、もし、あなたが年の言語を明確にしたい場合があります)が、: -

答えて

2

許[OK]を、見て、私は私はあなたがしているものの感覚を得ると思いますやって

最後の10個のメッセージ(または実際には最後のN個のメッセージ、ここではN = 10)を常に扱っている場合は、Redisが適していることがあります。私は長いポーリングを設定して、WebSocketsを介してインターフェイスウィジェットにキューワーカーのステータスを提供しました。私のアプリケーションはDjangoアプリ(nginxの前にあるgunicornで動作していました)でしたが、このワーカースレッド用の小さなトルネードクラスを追加しました。 WebSocketのステータスインタフェースに問題はありません。

ステータス機能は最後のN値を比較しなければなりませんでした。キューにRedisデータ構造を使用していたので、クライアントのWebSocketコンシューマで比較を行う方が簡単でした。私はその贅沢を感じました。比較のヒントはUIの状態のみであり、データの更新ではありませんでしたあなたがそういうことを心配していると私は思っています。

私が得意とするのは、あなたが提供したモデル構造がその仕事のために働くということですが、それはあまり適していません。 RedisとTornadoの音があまりにもエキゾチックな場合は、フィールドを追加してセッションごとのセットにレコードをグループ化することを検討してください。セッション識別子などから得られたインデックスを使用することをおすすめします。

これが役立つかどうか教えてください。

+0

また、私が言及したTornadoキューステータスサーバーを含むプロジェクトは、github上にあります。https://github.com/fish2000/django-imagekit/blob/icc-develop/imagekit/queue/servers.py – fish2000

+0

ありがとう返信用私は3リンクとより多くの情報と私のポストを編集 – hosein

+1

@ fish2000。私はあなたの最後の段落を取得していない、詳細を教えてください(セッションごとの部分を設定してください)。私はDjango/Gunicorn-Tornado-Nginxのアーキテクチャ、どのように配置されているか、そしてメッセージが前後にどのように伝達されるかについてもっと説明していただければ幸いです。 – securecurve

関連する問題