私の場合に最も近い例は、Django ajax チャット アプリケーションです。ルームは、アクティブなユーザーのリストを保持する必要があります。チャット内でユーザーのリストを表示する以外に、特定のルームには最大数のアクティブ ユーザーがいる場合があります。空きがない場合は、新規ユーザーの入場をブロックする必要があります。
現在、ajax を介して毎秒ポーリング ビューを呼び出すチャット クライアント ページがあります。投票ビューはルームのテキストを返します。ポーリングは、ある種の ping を実行することもできると思います。つまり、ユーザーを Room オブジェクトの active_user M2M フィールドに追加します (これまでのところ、これらはすべて用意されています)。次に必要なのは、ある種のタイムアウト後にその active_user リストからユーザーを削除するものです。
これを行うには 2 つの方法があると思いますが、秒単位 (または 10/15 秒) まで正確である必要があるアプリでは、どちらがより効率的か疑問に思っています。
- このスレッドで Cookie / セッション / ミドルウェアを使用する(ただし、この方法は瞬間的な情報には機能しないように思われます)
- 作成時とそれに続くすべてのpingで更新される日時フィールドを持つ明示的なUsers_Rooms「スルー」テーブルなどの別のモデル、および古いものをクリーンアップする関数を記述します
それは私が考えることができるすべてです。私は、すべての部屋のすべてのユーザーに対して毎秒 mySQL を実行することが良い考えであるかどうかを理解しようとしており、その 1 秒が実際にタスクに最適なオプションであるかどうか疑問に思っています。ありがとう!