0

ユーザーがサーバーに HTTP リクエストを送信します。このリクエストは、あるクラスのオブジェクトで処理されます。これを「プロセッサ」と呼びましょう。次に、同じユーザーが 2 分後に別の HTTP 要求を作成します。そして、最初のものと同じ Processor のインスタンスで処理したいと思います。したがって、基本的には、いくつかのリクエスト間でオブジェクトの状態を維持したいと考えています。

毎回データストアに保存してから再度読み込むことができることはわかっていますが、このアプローチは非常に遅いようです。オブジェクトをRAMの場所に保存する方法はありますか?

4

3 に答える 3

1

あなたが説明しているように聞こえるのはsessionです。

どの言語ランタイムと Web フレームワークを使用しているかはわかりませんが、セッションのサポートが含まれていることは確かです。(Java を使用している場合は、有効にする必要があります。)

標準のセッション メカニズムは、ユーザーのブラウザに保存されている Cookie に小さな ID を入れます。それぞれが異なるアプリケーション サーバーに送信される可能性があるすべての要求で、この ID は、データ ストアから永続的な情報を読み書きするためのキーとして使用されます。

データストアへのアクセスが遅すぎる場合は、このセッション ストレージに memcache を使用しないことをお勧めします。memcache は設計上信頼性が低く、ユーザーのセッション情報がいつでも消えてしまう可能性があり、ユーザーにとって悪い経験になるからです。

保存したいデータ量が数キロバイト未満の場合は、セッション データを暗号化し、ユーザーのブラウザに保存されている Cookie に直接保存する Play Framework と同じ方法をお勧めします。これは高速で真にステートレスです。

Cookie に保存できるよりも多くのデータがあり、データ ストアを使用したくない場合は、ブラウザーで JavaScript ローカル ストレージを使用し、AJAX 呼び出しを使用してサーバーと通信することができます。(古いブラウザをサポートしたい場合は、jStorageラッパー ライブラリを使用する必要があるかもしれません。)

于 2013-11-09T06:58:04.443 に答える
1

memcacheを使用するのはどうですか?

アプリへの連続したリクエストが同じインスタンスに送信されることを保証することはできませんが、memcache は、リクエストごとにデータストアにアクセスするオーバーヘッドを削減または排除するのに役立ちます。

于 2012-06-08T11:07:56.800 に答える
0

memcache が十分でない場合は、バックエンドを使用して状態を維持できます。常駐バックエンド (またはそれらのセット) を使用し、受信要求をフロントエンドから状態を持つバックエンド マシンにルーティングします。

ドキュメント: Python Java

于 2012-06-08T16:40:02.237 に答える