5

さまざまなブラウザ/ユーザー セッション間で、サーバー上でグローバルな状態を維持する必要があります。

ここでの私の仮定は、リクエストが入ったときに作成されるすべてのアトムなどは、そのリクエストに固有のものであるということです。応答が返されると、その状態はすべて破棄され、メモリが解放されます。間違っている場合は修正してください。

セッション ミドルウェアを使用すると、特定のセッションのリクエスト全体の状態をメモリ内に維持できます。

ただし、複数のユーザー セッションとリクエスト間で状態を維持するにはどうすればよいですか。可能であれば、外部に保存するために memcached / redis などの使用を避けたいと思います。メモリ自体でそれを達成することは可能ですか?

4

1 に答える 1

9

すべてのセッションで共有されるグローバルな状態が必要ということですか?

それが簡単でない場合は、好きな名前空間でアトムまたは参照を宣言するだけで、すべてのセッションで共有されます。

(def my-state (atom {:foo 1 :bar 2}))

これが機能するのは、アプリケーション サーバーが実行し続ける限り Clojure 環境が存続し、今後のすべての要求でグローバル状態を監視/変更できるためです。

そうは言っても、グローバルな状態はしばしばデザインの匂いであることを覚えておく価値が あります。これが本当に必要かどうか、または他の代替手段 (共有状態をデータベースにプッシュするなど) を検討する必要があるかどうかを検討する必要があります。

于 2012-09-13T10:35:38.393 に答える