4

私の場合に最も近い例は、Django ajax チャット アプリケーションです。ルームは、アクティブなユーザーのリストを保持する必要があります。チャット内でユーザーのリストを表示する以外に、特定のルームには最大数のアクティブ ユーザーがいる場合があります。空きがない場合は、新規ユーザーの入場をブロックする必要があります。

現在、ajax を介して毎秒ポーリング ビューを呼び出すチャット クライアント ページがあります。投票ビューはルームのテキストを返します。ポーリングは、ある種の ping を実行することもできると思います。つまり、ユーザーを Room オブジェクトの active_user M2M フィールドに追加します (これまでのところ、これらはすべて用意されています)。次に必要なのは、ある種のタイムアウト後にその active_user リストからユーザーを削除するものです。

これを行うには 2 つの方法があると思いますが、秒単位 (または 10/15 秒) まで正確である必要があるアプリでは、どちらがより効率的か疑問に思っています。

  • このスレッドで Cookie / セッション / ミドルウェアを使用する(ただし、この方法は瞬間的な情報には機能しないように思われます)
  • 作成時とそれに続くすべてのpingで更新される日時フィールドを持つ明示的なUsers_Rooms「スルー」テーブルなどの別のモデル、および古いものをクリーンアップする関数を記述します

それは私が考えることができるすべてです。私は、すべての部屋のすべてのユーザーに対して毎秒 mySQL を実行することが良い考えであるかどうかを理解しようとしており、その 1 秒が実際にタスクに最適なオプションであるかどうか疑問に思っています。ありがとう!

4

1 に答える 1

3

セッションを使用し、最後の pingdatetimeをセッション パラメータとして保存します。データベース ヒットについて心配する必要はありません。特定の時点でヒット数が多すぎると感じた場合は、セッション ストレージをcacheに切り替えてください。

アプリケーションをキャッシュ フラッシュに対して堅牢にします。

私の友人の 1 人は、比較的人気のある django ベースのソーシャル ネットワーキング ゲームをほぼ標準的な仮想プライベート サーバーでホストしていましたが、キャッシュ ベースのセッションに切り替えるまでにしばらく時間がかかりました。

于 2011-11-10T04:24:19.443 に答える