0

サイトの 1 人のユーザーが、私の Django サイトで別のユーザーにチャット リクエストできるようにしたいと考えています。依頼先に、「チャットしますか?」というリアルタイム ボックスを取得してもらいたいです。

次のクライアント ポーリング アプローチはどのように聞こえますか。

user1 が users2 のニックネームをクリックすると、いくつかの /message/requests への POST リクエストが生成され、データベースに CHAT_REQUEST タイプのメッセージが作成されます。一方、user2 のブラウザの Javascript は、サーバーにメッセージの更新を繰り返しクエリします。タイプ CHAT_REQUEST のメッセージを受信すると、ポップアップが開きます...

このアプローチの問題は、データベースへのアクセスにあるようです。

クライアントが 10 秒ごとにポーリングし、100 人のユーザーがブラウザ ウィンドウを開いたままにしておくと、1 秒あたり 10 データベース リクエストになります。

これらのメッセージをデータベースではなく、Django RAM またはセッション情報に保存する方がよいでしょうか? それとも、このデータベース テーブルは PostgreSQL で RAM にキャッシュされ、取得は高速になりますか?

4

2 に答える 2

2

このためのデータベーステーブルは、あなたが言ったようにサーバーに負荷をかけますが、何らかの理由でこれらのリクエストの記録を保持したい場合に役立つかもしれません。

memcachedやAMQPサーバーなどを使用すると、パフォーマンスが向上する場合があります。必要に応じて、Tokyo Cabinet /TokyoTyrantなどのより高性能なKey-Valueストアを使用することもできます。

于 2010-02-24T21:30:44.503 に答える
1

サーバーのパフォーマンスと帯域幅の使用が心配な場合は、「AJAX のような」通信ではなく「COMET のような」通信を探すことをお勧めします。

ところで、REDISは、そのようなメモリ内データ構造の処理に非常に適しているようです。

于 2011-08-08T18:01:46.587 に答える